この中でgreat article Keithは、Powershellの終了エラーと終了していないエラーの違いについて説明しています。 .NETオブジェクトまたはタイプのメンバーへの呼び出しからスローされるKeith例外によれば、非終了エラーです。その後、.netメソッドから例外として、終了または終了しないエラーがありますか?
$a = Add-Type 'public class bla { public static void bl() { throw new System.ApplicationException("test"); }}' -PassThru
そして、この機能を:我々はテストのために、この.NETクラスを定義する確かならば
function tst { 1 | write-host; $a::bl(); 2 | Write-host }
我々はTST関数が呼び出されたときに例外が非ように見えることがわかります終了:第2のWrite-Host
が動作します。
しかし、これを考慮して
:function tst2 { try { tst } catch { "Catch!" } }
我々はthe documentationを開くと、我々はキャッチがに応答するか、スクリプトで終端エラーを処理することを読み取ることができます。記事の本文全体を通して、記事が扱っているエラーは、多くの場所で "終了"と認定されています。
したがって、上の行を実行すると、2番目のWrite-Hostは実行されませんが、catchブロックは実行されます。私たちの非終了エラーが突然終了するようです。
どうしてですか?
別の観察は、古き良きトラップと、それはまだ終了しないエラーだということです。今
function tst3 { tst trap { "Trap!" } }
、実用的な観点から、私が達成したいことは以下の通りです。コードブロックでは、.NETコードからスローされた例外を終了したい。私は、コマンドレットからのエラーの終了と、非終了のコマンドレットからの終了しないエラーを残したいと考えています。
どうすればよいですか?
例:
Do-Something
Call::Something()
Do-SomethingElse
Call::SomethingElse()
Do-YetMoreSomething
Call::YetMoreSomething()
私は上記の.NETの呼び出しからのすべての例外に終了させたいです。私はまた、コマンドレットからのエラーの終了時に終了したい。私は、コマンドレットからの終了していないエラーで終了したくありません。
@keithhillお手伝いできますか?ありがとう! –
これは$ ErrorActionPreferenceで定義できませんか?コードの実際の終了動作ではなく、スクリプトがそれをどのように処理するか... ...? –