16

如果使用 -File 参数调用,当发生错误时,Powershell 将返回 0 退出代码。这意味着我的构建不应该是绿色的:(

例如:

(在 wtf.ps1 中)

$ErrorActionPreference = "Stop";   
$null.split()

(命令)

powershell -file c:\wtf.ps1  
You cannot call a method on a null-valued expression.
At C:\wtf.ps1:3 char:12
+ $null.split <<<< ()
    + CategoryInfo          : InvalidOperation: (split:String) [], ParentConta
   insErrorRecordException
    + FullyQualifiedErrorId : InvokeMethodOnNull


echo %errorlevel%  
0

powershell c:\wtf.ps1  
You cannot call a method on a null-valued expression.
At C:\wtf.ps1:3 char:12
+ $null.split <<<< ()
    + CategoryInfo          : InvalidOperation: (split:String) [], ParentConta
   insErrorRecordException
    + FullyQualifiedErrorId : InvokeMethodOnNull


echo %errorlevel%  
1

有任何想法吗?

(我已经尝试了前两页的所有想法:https ://www.google.co.uk/search?q=powershell+file+argument+exit+ code)

4

2 回答 2

12

在脚本中,使用带有您选择的数字的 exit 关键字:

exit 34

这是我用来测试的脚本:

## D:\Scripts\Temp\exit.ps1 ##
try{
    $null.split()
}
catch
{
    exit 34
}

exit 2
#############################

# launch powershell from cmd 
C:\> powershell -noprofile -file D:\Scripts\Temp\exit.ps1
C:\>echo %errorlevel%
34
于 2012-05-16T14:35:57.127 回答
12

这是一个已知问题。解决方法是使用 -File 调用脚本,使用 -Command 参数(并添加 ; exit $lastexitcode 如果您也有自己的退出代码)或将它们转换为退出代码,如Shay显示的或使用下面的陷阱的示例。请参阅此处了解更多信息。

trap
{
    $ErrorActionPreference = "Continue";   
    Write-Error $_
    exit 1
}

$ErrorActionPreference = "Stop";   
$null.split()
于 2013-08-23T22:10:47.863 回答