-Fileコマンドラインスイッチを使用してPowershellスクリプト(2.0)を実行し、Paramで入力パラメータを明示的に定義すると、終了コードは常に "0"定義された、または予期されたエラーコードを適切に返すのではなく、
明示的なパラメータ定義と- コマンドスイッチを使用している場合はこれは発生しませんが、無関係な場合はスクリプトに-Fileスイッチを入れておく必要があります。powershellが適切な終了コードを返すことができない
回避策(明示的なパラメータ定義の削除は含まれません)に関するサポートは非常に役に立ちます。
PowerShellは、 "正しい終了コードを返すことに失敗した":
exit1.ps1:明示的なパラメータを定義するスクリプトを呼び出します。 errorlevelは、重大に失敗したスクリプトの部分があっても、常に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;
(三つのパラメータを持つ)出力:
C:\temp\testnant>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\Exit1looseParam.ps1 "one" "two" "three"
C:\temp\testnant>echo %errorlevel%
1
あなたが明示的に入力パラメータを定義する場合、PowerShellは何らかの理由で、「そのfreakinの心を失う」ようだと返すことに失敗したことが表示されます適切な終了コード。
誰もが回避策を持っているか、これが起こっている理由を説明することはできますか?
が正しく終了コードを返すように。ありがとう! – JonnyG
これはありがとう、ちょうど私のための問題をソートしました:) –
これがなければ私は0または1を返すために出口を得ることができます – cmcginty