我想在Powershell中对一个.exe进行Try Catch,我的情况是这样的。
Try
{
$output = C:\psftp.exe ftp.blah.com 2>&1
}
Catch
{
echo "ERROR: "
echo $output
return
}
echo "DONE: "
echo $output
当我使用一个无效的域名时,它返回一个错误,比如: psftp.exe : Fatal: Network error: Connection refused
但我的代码没有捕捉到这一点。
我怎么才能抓到错误?
try / catch
在PowerShell中,对本地可执行文件不适用。调用psftp.exe后,请检查自动变量-----------------。$LastExitCode
. 这将包含psftp的退出代码,例如。
$output = C:\psftp.exe ftp.blah.com 2>&1
if ($LastExitCode -ne 0)
{
echo "ERROR: "
echo $output
return
}
上面的脚本假定 exe 成功后返回 0,否则返回非零。 如果不是这样,调整 if (...)
条件相应。
> PowerShell中的try catch对本地可执行文件不起作用。
事实上,它可以,但只有当你使用"$ErrorActionPreference = 'Stop'" 并附加 "2>&1"。
参见 "处理本地命令 "Tobias Weltner,地址是 https:/community.idera.comdata-base-toolspowershellpowertipsbebookv2postschapter-11-错误处理。.
例如:
$ErrorActionPreference = 'Stop'
Try
{
$output = C:\psftp.exe ftp.blah.com 2>&1
}
Catch
{
echo "ERROR: "
echo $output
return
}
echo "DONE: "
echo $output