12

-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の心を失う」ようだと返すことに失敗したことが表示されます適切な終了コード。

誰もが回避策を持っているか、これが起こっている理由を説明することはできますか?

答えて

14

奇妙なことですが、exit 1がどちらの場合でも動作すると思います。少なくとも、あなたは両方のためにこれを使用することができますように見えるん

[Environment]::Exit(1)

+0

が正しく終了コードを返すように。ありがとう! – JonnyG

+0

これはありがとう、ちょうど私のための問題をソートしました:) –

+0

これがなければ私は0または1を返すために出口を得ることができます – cmcginty

関連する問題