2017-10-31 10 views
0

コールオペレータを使用するときにゼロ以外の終了コードがあり、$ErrorActionPerference = "Stop"があるときにPowerShellスクリプトが終了しないのはなぜですか?コールオペレータを使用してゼロ以外の終了コードがある場合、PowerShellスクリプトが終了しないのはなぜですか?

次の例を使用して、私は結果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 documentation for the call operatorは、呼び出し演算子を使用した場合にどうするかについては説明しません、それだけで次のように述べている:

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.


さらに、これが予想される動作であれば、コールオペレータにエラーを発生させずに継続させる方法はありますか?

+0

'もし($ LASTEXITCODE -eq 1){スロー「終了コードされます1 "}'? – Jelphy

+0

0以外は何もエラーコードではありません: 'if($ LASTEXITCODE -ne 0){throw" Exit code is $ LASTEXITCODE "}' –

+1

この方法では* -ErrorActionをエラーコードが意味するものは標準化されていません。ゼロ以外の終了コードが原因でPowerShellエラーが発生した場合、作業を完了させるために、すべての外部コマンドを 'try .. catch'でラップする義務があります。これは大変厄介なことです。 PowerShellは主にシェル言語であり、一般的なプログラミング言語ではありません。 ( 'cmd.exe'は終了コードについても同じことを気にしません - もちろん、あなた自身でチェックすることは自由です)。 –

答えて

2

戻りコードはPowerShellエラーではありません。他の変数と同じように見えます。あなたはその後、終了エラーとしてそれを見るためにあなたのためのスクリプトをPowerShellを使用して変数とthrowにエラーが行動する必要が

$ErrorActionPreference = "Stop" 

& cmd.exe /c "exit 1" 

if ($LASTEXITCODE -ne 0) { throw "Exit code is $LASTEXITCODE" } 
関連する問題