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

在PowerShell脚本中处理命令提示错误,powershell,cmd,powershell-2.0,Powershell,Cmd,Powershell 2.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' 调用表达式-Command:$Command 我无法在PowerShell脚本的try..catch块中运行这些命令并忽略或捕获异常。我知道有库,但我仅限

我正在尝试在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'
  • 调用表达式-Command:$Command

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

如果外部命令以错误终止,通常会设置非零退出代码,因此您可以检查
$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

每次调用
cmd.exe
后检查
$LASTEXITCODE
——非零值表示命令失败。通常,您可以让命令本身报告其退出代码,而不需要
|
子句。但是,如果您确实使用了一个,请确保它以
退出1
结尾(或另一个非零退出代码);在您的第一个命令中,由于您在
|
子句中执行
echo
(作为唯一的命令),因此总体退出代码将错误地为
0
。是的,但是如果该命令引发错误,powershell脚本也会显示该错误,我希望避免看到该错误消息。要抑制该命令的stderr输出,将
2>NUL
直接附加到相关命令(在单引号内);e、 g.
'schtasks/Query/TN xx 2>NUL'
。要同时抑制标准输出,请添加
>NUL