-Fileコマンド ライン スイッチを使用して (2.0 で) Powershell スクリプトを実行し、Param で入力パラメーターを明示的に定義すると、定義済みまたは予想されるエラー コードが適切に返される代わりに、終了コードが常に "0" (決して失敗しない) になります。これは、明示的なパラメーター定義と-Command
スイッチ
を使用する場合には発生しませんが、無関係な目的のために、スクリプトに -File スイッチを保持する必要があります。
回避策(明示的なパラメーター定義の削除を伴わないもの) に関する支援は、非常に役立ちます。
Powershell は「正しい終了コードを返すことができません」:
exit1.ps1: パラメータを明示的に定義するスクリプトを呼び出します。エラーレベルは、たとえスクリプトの一部が不用意に失敗したとしても、常に 0 です。
param(
[Parameter(mandatory=$true)][string]$arg1,
[Parameter(mandatory=$true)][string]$arg2,
[Parameter(mandatory=$true)][string]$arg3
);
exit 1;
出力:
C:\temp\testnant>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\exit1.ps1 "one" "two" "three"
C:\temp\testnant>echo %errorlevel%
0
次に、param 関数を変更して明示的でないようにするときに、同じことを試してみましょう。
Exit1LooseParam.ps1:
param(
$arg1,
$arg2,
$arg3
);
exit 1;
出力 (3 つのパラメーターを使用):
C:\temp\testnant>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\Exit1looseParam.ps1 "one" "two" "three"
C:\temp\testnant>echo %errorlevel%
1
入力パラメーターを明示的に定義すると、Powershell は何らかの理由で「気が狂った」ように見え、適切な終了コードを返すことができないようです。
誰かが回避策を持っているか、これが起こっている理由を説明できますか?