当使用调用运算符的非零退出代码时,为什么 PowerShell 脚本不会结束?
当使用调用运算符和 $ErrorActionPerference = "Stop"
时使用非零退出代码时,为什么 PowerShell 脚本不会结束?
Why does a PowerShell script not end when there is a non-zero exit code using when using the call operator and $ErrorActionPerference = "Stop"
?
使用下面的例子,我得到的结果 managed to get here with exit code 1
:
Using the following example, I get the result managed to get here with exit code 1
:
$ErrorActionPreference = "Stop"
& cmd.exe /c "exit 1"
Write-Host "managed to get here with exit code $LASTEXITCODE"
Microsoft 呼叫运算符文档 没有讨论使用呼叫运算符时会发生什么,它仅说明以下内容:
The Microsoft documentation for the call operator does not discuss what should happen when using call operator, it only states the following:
运行命令、脚本或脚本块.调用运算符,也称为调用运算符",可让您运行存储在变量中并由字符串表示的命令.由于调用运算符不解析命令,因此无法解释命令参数.
Runs a command, script, or script block. The call operator, also known as the "invocation operator," lets you run commands that are stored in variables and represented by strings. Because the call operator does not parse the command, it cannot interpret command parameters.
此外,如果这是预期行为,是否还有其他方法可以让调用运算符导致错误而不是让它继续?
Additionally, if this is expected behaviour, is there any other way to have the call operator cause an error rather than let it continue?
返回码不是 PowerShell 错误 - 它与任何其他变量的显示方式相同.
The return code is not a PowerShell error - it's seen the same way as any other variable.
然后您需要对变量进行操作并使用 PowerShell throw
一个错误,以便您的脚本将其视为终止错误:
You need to then act on the variable and throw
an error using PowerShell for you script to see it as a terminating error:
$ErrorActionPreference = "Stop"
& cmd.exe /c "exit 1"
if ($LASTEXITCODE -ne 0) { throw "Exit code is $LASTEXITCODE" }