終了するエラー

このトピックでは、終了エラーを報告するために使用される方法について説明します。 また、コマンドレット内から メソッドを呼び出す方法と、メソッドの呼び出し時に Windows PowerShell ランタイムによって返される例外について説明します。

終了エラーが発生した場合、コマンドレットは System.Management.Automation.Cmdlet.Throwterminatingerror* メソッドを呼び出してエラーを報告する必要があります。 このメソッドを使用すると、コマンドレットは、終了エラーの原因となる条件を記述するエラー レコードを送信できます。 エラー レコードの詳細については、「エラー レコードのWindows PowerShellを参照してください

System.Management.Automation.Cmdlet.Throwterminatingerror*メソッドが呼び出された場合、Windows PowerShell ランタイムはパイプラインの実行を完全に停止し、System.Management.Automation.Pipelinestoppedexception例外をスローします。 その後、System.Management.Automation.Cmdlet.WriteObject、System.Management.Automation.Cmdlet.WriteError、または他のいくつかの API を呼び出しようとすると、これらの呼び出しによってSystem.Management.Automation.Pipelinestoppedexception例外がスローされます。

System.Management.Automation.Pipelinestoppedexception例外は、パイプライン内の別のコマンドレットが終了エラーを報告した場合、ユーザーがパイプラインの停止を求めた場合、または何らかの理由でパイプラインが完了する前に停止された場合にも発生する可能性があります。 コマンドレットは、開いているリソースまたは内部状態をクリーンアップする必要がない限り 、System.Management.Automation.Pipelinestoppedexception 例外をキャッチする必要があります。

コマンドレットは、終了エラーを報告する前に、任意の数の出力オブジェクトまたは終了しないエラーを書き込む可能性があります。 ただし、終了エラーはパイプラインを永続的に停止し、それ以上の出力、終了エラー、または終了しないエラーは報告されません。

コマンドレットは、System.Management.Automation.Cmdlet.BeginProcessing、System.Management.Automation.Cmdlet.ProcessRecord、またはSystem.Management.Automation.Cmdlet.EndProcessing入力処理メソッドを呼び出したスレッドからのみ、System.Management.Automation.Cmdlet.Throwterminatingerror*を呼び出すことができます。 別のスレッドから System.Management.Automation.Cmdlet.Throwterminatingerror* または System.Management.Automation.Cmdlet.WriteError の呼び出しを試みない。 代わりに、エラーをメイン スレッドに伝達する必要があります。

System.Management.Automation.Cmdlet.BeginProcessing、System.Management.Automation.Cmdlet.ProcessRecord、またはSystem.Management.Automation.Cmdlet.EndProcessingメソッドの実装で、コマンドレットが例外をスローする可能性があります。 これらのメソッドからスローされた例外 (Windows PowerShell ホストを停止する重大なエラー条件を除く) は、パイプラインを停止する終了エラーとして解釈されますが、Windows PowerShell 全体としては解釈されません。 (これは、メイン コマンドレット スレッドにのみ適用されます。 コマンドレットによって生成されたスレッドでキャッチされない例外は、一般に、ホストのWindows PowerShell停止します)。)エラー レコードにはエラー状態に関する追加情報が提供され、エンドユーザーにとって役立つため、例外をスローするのではなく、System.Management.Automation.Cmdlet.Throwterminatingerror*を使用することをお勧めします。 コマンドレットは、すべての例外 ( ) をキャッチして処理することの対策として、マネージド コードガイドラインに従う必要があります catch (Exception e) 。 既知の型と予期される型の例外のみをエラー レコードに変換します。

参照

System.Management.Automation.Cmdlet.BeginProcessing

System.Management.Automation.Cmdlet.EndProcessing

System.Management.Automation.Cmdlet.ProcessRecord

System.Management.Automation.Pipelinestoppedexception

System.Management.Automation.Cmdlet.Throwterminatingerror*

System.Management.Automation.Cmdlet.WriteError

Windows PowerShell エラー レコード

Windows PowerShell コマンドレットの記述