2

PowerShellスクリプトがあります。

...
Any-Command -ErrorCode Stop
...

次に、このスクリプトをバットスクリプトから呼び出します。

...
powershell myscript.ps1
...

呼び出されたPowerShellスクリプトがエラーで停止し、スクリプトの最後に達していない場合、 batスクリプトで知りたいと思います。どうやってするの?

4

2 に答える 2

4

これを行う 1 つの方法は、次のようなトップ レベルのトラップ ステートメントをスクリプトに追加することです。

trap {
   exit 1; # or whatever error code
}

注: トラップは時代遅れと見なされる場合があります (トップレベルでは好きですが)、もう 1 つのオプションは、スクリプト全体の try-finally です。

そのため、Any-Command が例外で終了すると、trap ステートメントが実行され、スクリプトはエラー コード 1 で終了します。これを追加しないと、Powershell はエラー コード 0 で終了します (結局のところ、Powershell は正常に実行されましたが、スクリプトはしませんでした)。

次に、次のようなものを使用して、bat スクリプトでエラー コードを検出できます。

powershell -noprofile -noninteractive -file <<your script>>

IF ERRORLEVEL 1 (echo ERROR) ELSE (echo OK)

pause

これにより、1 以上のエラー コードが検出されます。

も使用できます%ERRORLEVEL%が、これは環境変数としてオーバーライドされる可能性があることに注意してください。

注: ネストされた実行空間でスクリプトを実行している場合は$host.SetShouldExit(1)、ルート ホストも確実に終了するように使用することを検討できます。

于 2012-11-18T23:23:43.457 に答える
0

マーカスからの回答に追加するだけです

トラップ コードが実際のエラーを隠していることに気付きました。私の場合、実際のエラーが発生する必要がありました。補完のために変更されたコードを追加するだけです。

 trap 
    { 
        write-error $("Error: " + $_.Exception.Message); 
        exit 1; # or whatever error code 
    } 

詳細については、http://huddledmasses.org/trap-exception-in-powershell/を参照してください。

于 2013-10-08T06:44:59.663 に答える