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

sem*_*d3r 9 powershell cmd powershell-2.0

我试图schtasks在PowerShell脚本中运行一些命令提示符命令.我想知道如何处理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

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

Ans*_*ers 12

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

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

但是,请注意,有些程序对非错误信息使用非零退出代码(例如robocopy,使用低于8的退出代码获取状态信息,或choice使用退出代码指示所选选项).

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

& cmd /c 'schtasks /Query /TN xx 2>nul'
Run Code Online (Sandbox Code Playgroud)

或者在PowerShell中:

& cmd /c 'schtasks /Query /TN xx' 2> $null
Run Code Online (Sandbox Code Playgroud)