我有一组测试 DLL,我从一个 powershell 脚本运行,该脚本通过 Start-Process 命令调用 OpenCover.Console.exe。

我设置了 -returntargetcode 标志

执行后我检查 $lastexitcode$? 。它们始终分别返回 1 和 True。即使测试失败。

当所有测试都通过时,$lastexitcode 不应该是 0,当它们失败时不应该是 1 吗?

最佳答案

默认情况下,Start-Process 是异步的,因此它不会等待您的进程退出。如果您希望您的命令行工具同步运行,请删除 Start-Process 并直接调用该命令。这是设置 $LASTEXITCODE 的唯一方法。例如,导致 CMD.exe 以 2 退出:

cmd /c exit 2
$LASTEXITCODE

您可以通过添加 Start-Process 标志使 -Wait 同步,但它仍然不会设置 $LASTEXITCODE 。要从 Start-Process 获取 ExitCode,您需要将 -PassThru 添加到您的 Start-Process ,然后输出一个 [System.Diagnostics.Process] 对象,您可以使用它来监视进程,并(最终)访问其 ExitCode 属性。这是一个应该有帮助的例子:
$p = Start-Process "cmd" -ArgumentList "/c exit 2" -PassThru -Wait
$p.ExitCode

当然,这种方法的优点是您不需要等待进程,但是稍后当它退出时,您将获得有关它在 $p 中运行的信息。

关于PowerShell Start-Process 未设置 $lastexitcode,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39496829/

10-16 09:23