16

エラーが発生した場合、Powershellは、-File引数を指定して呼び出された場合、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

何か案は?

(私はこれの最初の2ページからほとんどすべてのアイデアを試しました:https ://www.google.co.uk/search?q = powershell + file + arguments + 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

これは既知の問題です。回避策は、 -Command パラメータを使用して -File でスクリプトを呼び出す (独自の終了コードもある場合は ; exit $lastexitcode を追加する) か、Shayが示しているような終了コードまたは以下のトラップを使用する例にそれらを変換することです。詳しくはこちらをご覧ください。

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

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