在PowerShell脚本中处理命令提示符错误

时间:2016-01-12 23:09:04

标签: powershell cmd powershell-v2.0

我试图在PowerShell脚本中运行一些命令提示符命令,如schtasks。我想知道如何处理PowerShell中命令引发的错误。

我试过了:

  • & cmd.exe /c 'schtasks /Query /TN xx || echo ERROR'
  • & cmd.exe /c 'ping.exe 122.1.1.1 && exit 0 || exit 1'
  • Invoke-Expression -Command:$command

我无法在PowerShell脚本的try..catch块中运行这些命令并忽略或捕获异常。我知道有库,但我只限于PowerShell v2.0。

1 个答案:

答案 0 :(得分:11)

如果外部命令因错误而终止,则通常会设置非零退出代码,因此您可以检查automatic variable $LASTEXITCODE是否具有非零值:

& cmd /c 'schtasks /Query /TN xx'
if ($LASTEXITCODE -ne 0) {
  'an error occurred'
}

但请注意,有些程序使用非零退出代码来处理非错误信息(例如robocopy,它使用低于8的退出代码获取状态信息,或choice ,使用退出代码表示所选的选项。

可以通过在CMD中重定向错误输出流来抑制外部命令的错误消息:

& cmd /c 'schtasks /Query /TN xx 2>nul'

或在PowerShell中:

& cmd /c 'schtasks /Query /TN xx' 2> $null