处理 PowerShell 脚本中的命令提示符错误
Handle command prompt error within PowerShell script
我正在尝试 运行 一些命令提示符命令,例如 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。
如果外部命令以错误终止,通常会设置一个 non-zero 退出代码,因此您可以检查 automatic variable $LASTEXITCODE
是否具有 non-zero 值:
& cmd /c 'schtasks /Query /TN xx'
if ($LASTEXITCODE -ne 0) {
'an error occurred'
}
但是请注意,有些程序使用 non-zero 退出代码来获取 non-error 信息,(例如 robocopy
,它使用 8 以下的退出代码来获取状态信息,或 choice
,它使用退出代码来指示所选择的选项)。
可以通过在 CMD 中重定向错误输出流来抑制外部命令的错误消息:
& cmd /c 'schtasks /Query /TN xx 2>nul'
或在 PowerShell 中:
& cmd /c 'schtasks /Query /TN xx' 2> $null
我正在尝试 运行 一些命令提示符命令,例如 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。
如果外部命令以错误终止,通常会设置一个 non-zero 退出代码,因此您可以检查 automatic variable $LASTEXITCODE
是否具有 non-zero 值:
& cmd /c 'schtasks /Query /TN xx'
if ($LASTEXITCODE -ne 0) {
'an error occurred'
}
但是请注意,有些程序使用 non-zero 退出代码来获取 non-error 信息,(例如 robocopy
,它使用 8 以下的退出代码来获取状态信息,或 choice
,它使用退出代码来指示所选择的选项)。
可以通过在 CMD 中重定向错误输出流来抑制外部命令的错误消息:
& cmd /c 'schtasks /Query /TN xx 2>nul'
或在 PowerShell 中:
& cmd /c 'schtasks /Query /TN xx' 2> $null