在Powershell中对可执行的exe进行Try Catch?

问题描述 投票:14回答:2

我想在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 但我的代码没有捕捉到这一点。

我怎么才能抓到错误?

powershell try-catch
2个回答
23
投票

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 (...) 条件相应。


0
投票

> 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
© www.soinside.com 2019 - 2024. All rights reserved.