我试图在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。
答案 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