尝试在Powershell中捕获可执行文件exe?

时间:2012-09-10 21:03:28

标签: powershell try-catch

我想在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之类的错误,但我的代码却没有抓住它。

我如何捕捉错误?

2 个答案:

答案 0 :(得分:19)

PowerShell中的

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