如果使用-File参数调用,Powershell将在发生错误时返回0退出代码。这意味着我的构建是绿色的,不应该是:(
例如:
(在wtf.ps1中)
$ErrorActionPreference = "Stop";
$null.split()
(cmd)
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已经)
答案 0 :(得分:11)
在脚本中,使用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
答案 1 :(得分:9)
是a known problem。变通方法使用-File调用脚本,使用-Command参数(并添加;如果您还有自己的退出代码,则退出$ lastexitcode)或将其转换为Shay显示的退出代码或使用下面的陷阱示例。有关详细信息,请参阅here。
trap
{
$ErrorActionPreference = "Continue";
Write-Error $_
exit 1
}
$ErrorActionPreference = "Stop";
$null.split()