我想在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
之类的错误,但我的代码却没有抓住它。
我如何捕捉错误?
答案 0 :(得分:19)
try / catch
不适用于本机可执行文件。调用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 (...)
条件。
答案 1 :(得分:1)
>在PowerShell中尝试/捕获不适用于本机可执行文件。
实际上是的,但是只有在您使用“ $ ErrorActionPreference ='Stop'”并附加“ 2>&1”的情况下。
请参阅https://community.idera.com/database-tools/powershell/powertips/b/ebookv2/posts/chapter-11-error-handling上的“处理本机命令” / Tobias Weltner。
例如
$ErrorActionPreference = 'Stop'
Try
{
$output = C:\psftp.exe ftp.blah.com 2>&1
}
Catch
{
echo "ERROR: "
echo $output
return
}
echo "DONE: "
echo $output