PowerShellは、適切な出口コードを返すことができません
-
29-10-2019 - |
質問
PowerShellスクリプトを実行するとき(2.0) -ファイル コマンドラインスイッチ、およびPARAMの入力パラメーターを明示的に定義すると、EXITコードは、定義または予想されるエラーコードを適切に返すのではなく、常に「0」(決して失敗しません)です。
これは、明示的なパラメーター定義と -指示 ただし、無関係な目的のために、スクリプトに-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は何らかの理由で「気バーキを失う」ようで、適切な出口コードを返すことができないようです。
誰もが回避策を持っているのか、なぜこれが起こっているのかを説明することができますか?
正しい解決策はありません
所属していません StackOverflow