gpt4 book ai didi

.net - 有没有办法捕获powershell脚本中exe文件抛出的异常?

转载 作者:行者123 更新时间:2023-12-02 10:57:14 25 4
gpt4 key购买 nike

我正在编写一个模仿 watch 行为的 powershell 脚本。它工作正常,直到我看到一个抛出异常的 exe。

发生这种情况时,Visual Studio 中的 JIT 调试器将启动并打开一个对话框。我尝试使用 try/catch block 捕获异常,如下面的代码示例所示。

我知道我可以在 VS 中关闭调试器,但我不想打开它,因为它对调试很有用。我只想捕获/抑制在此脚本中遇到的异常和弹出窗口。

我读过一些资料,声称它在 powershell 中不可行,但我希望他们是错误的,并且有一些聪明的方法可以解决这个问题。有人有什么建议吗?

我尝试过的:

$tick = "-"

while ($true)
{
try {
$out = invoke-expression "$args"
}
catch {
$out = "Error: " + $_.Exception.Message
} finally {
cls
$out
$tick
if ($tick -eq "-") {$tick = "+"} else {$tick = "-"}
sleep 1
}
}

我还尝试将 [Exception][System.IO.IOException](我收到的具体异常)添加到 catch block 中,但没有任何运气.

最佳答案

Exe 使用退出代码返回错误状态而不是 .NET 异常。解决方法是检查 $lasterrorexitcode。如果您想使用 try/catch block ,则如果 LastErrorcode 不等于 0,则可以发出 throw 语句。注意:需要小心的一件事是某些 exe 使用非零错误代码返回错误以外的状态。

这是一个例子:

包裹在 try/catch block 中

try {
$result = some-exe.exe

if ($lastexitcode -ne 0) {

$result = $result -join "`n"
throw "$result `n"
}
}
catch {
write-error "$_"
}

关于.net - 有没有办法捕获powershell脚本中exe文件抛出的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19133569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com