我怎样才能获得PowerShell来返回正确的退出代码时使用-file参数来调用?(How can

2019-07-29 10:28发布

PowerShell是返回一个0退出代码,当发生了错误,如果调用使用-file参数。 这意味着我的版本是绿色的,当它不应该是:(

例如:

(在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

有任何想法吗?

(我试过几乎每一个想法从第2页如此: https://www.google.co.uk/search?q=powershell+file+argument+exit+code已经)

Answer 1:

在脚本中,使用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


Answer 2:

这是一个已知的问题 。 解决方法正在呼吁与-文件的脚本,使用-Command参数(并加入;退出$ lastexitcode,如果你也有自己的退出代码),或者把他们变成退出码像吉文被显示或使用陷阱下面的例子。 请参阅这里了解更多信息。

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

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


文章来源: How can I get powershell to return the correct exit code when called with the -File argument?