次の方法で共有


コマンドレットエラー報告

コマンドレットは、エラーがエラーを終了するか、エラーを終了しないかに応じて、異なる方法でエラーを報告する必要があります。 終了エラーは、パイプラインが直ちに終了する原因となるエラー、または処理を続行する理由がない場合に発生するエラーです。 非終了エラーは、現在のエラー状態を報告するエラーですが、コマンドレットは引き続き入力オブジェクトを処理できます。 非終了エラーでは、通常、ユーザーに問題が通知されますが、コマンドレットは引き続き次の入力オブジェクトを処理します。

終了エラーと非終了エラー

次のガイドラインを使用して、エラー状態が終了エラーか非決定エラーか判断できます。

  • エラー状態により、コマンドレットでそれ以上の入力オブジェクトが正常に処理されませんか? その場合、これは終了エラーです。

  • エラー状態は、特定の入力オブジェクトまたは入力オブジェクトのサブセットに関連していますか? その場合、これは不特定のエラーです。

  • コマンドレットは、別の入力オブジェクトで処理が成功する可能性がある、複数の入力オブジェクトを受け入れるか。 その場合、これは不特定のエラーです。

  • 複数の入力オブジェクトを受け入れ可能なコマンドレットは、特定の状況が 1 つの入力オブジェクトにのみ適用される場合でも、終了するエラーと非決定エラーの間で決定する必要があります。

  • コマンドレットは、任意の数の入力オブジェクトを受け取り、終了する例外をスローする前に任意の数の成功オブジェクトまたはエラー オブジェクトを送信できます。 受信した入力オブジェクトの数と送信された成功オブジェクトとエラー オブジェクトの数との間には関係はありません。

  • 0 から 1 の入力オブジェクトのみを受け入れ、0 から 1 の出力オブジェクトのみを生成できるコマンドレットでは、エラーを終了エラーとして扱い、終了する例外を生成する必要があります。

非確認エラーの報告

非終了エラーの報告は 、System.Management.Automation.Cmdlet.BeginProcessing メソッド 、System.Management.Automation.Cmdlet.ProcessRecord メソッド、または System.Management.Automation.Cmdlet.EndProcessing メソッドのコマンドレットの実装内で常に行う必要があります。 これらの種類のエラーは 、System.Management.Automation.Cmdlet.WriteError メソッドを呼び出して報告されます。このメソッドは、エラー レコードをエラー ストリームに送信します。

終了エラーの報告

終了エラーは、例外をスローするか 、System.Management.Automation.Cmdlet.ThrowTerminatingError メソッドを呼び出すことによって報告されます。 コマンドレットは OutOfMemory などの例外をキャッチして再スローすることもできますが、PowerShell ランタイムでも例外がキャッチされるので、例外を再スローする必要はありません。

また、状況に固有の問題に対して独自の例外を定義したり、エラー レコードを使用して既存の例外に追加情報を追加したりできます。

エラー レコード

PowerShell では 、System.Management.Automation.ErrorRecord オブジェクトを使用して、不特定のエラー状態について説明します。 各オブジェクトは、エラー カテゴリ情報、オプションのターゲット オブジェクト、およびエラー状態に関する詳細を提供します。

エラー識別子

エラー識別子は、コマンドレット内のエラー条件を識別する単純な文字列です。 PowerShell は、この識別子をコマンドレット識別子と組み合わせ、エラー ストリームをフィルター処理したり、エラーをログに記録したりするときに、特定のエラーに応答する場合、または他のユーザー固有のアクティビティで後で使用できる完全修飾エラー識別子を作成します。

エラー識別子を指定する場合は、次のガイドラインに従う必要があります。

  • 異なるコード パスに、非常に固有の異なるエラー識別子を割り当てる。 System.Management.Automation.Cmdlet.WriteErrorまたはSystem.Management.Automation.Cmdlet.ThrowTerminatingErrorを呼び出す各コード パスには、独自のエラー識別子が必要です。

  • エラー識別子は、終了エラーと非終了エラーの両方について、共通言語ランタイム (CLR) 例外の種類に対して一意である必要があります。

  • コマンドレットまたは PowerShell プロバイダーのバージョン間でエラー識別子のセマンティクスを変更しない。 エラー識別子のセマンティクスが確立された後は、コマンドレットのライフサイクル全体を通して一定の状態を維持する必要があります。

  • 終了エラーの場合は、特定の CLR 例外の種類に対して一意のエラー識別子を使用します。 例外の種類が変更された場合は、新しいエラー識別子を使用します。

  • 不特定のエラーの場合は、特定の入力オブジェクトに対して特定のエラー識別子を使用します。

  • 報告されるエラーに非常に対応する識別子のテキストを選択します。 空白や句読点は使用しない。

  • 再現できないエラー識別子を生成しない。 たとえば、プロセス識別子を含む識別子は生成しない。 エラー識別子は、同じ問題が発生している他のユーザーによって表示される識別子に対応している場合にのみ役立ちます。

エラー カテゴリ

エラー カテゴリは、ユーザーのエラーをグループ化するために使用されます。 PowerShell では、これらのカテゴリとコマンドレットが定義され、PowerShell プロバイダーはエラー レコードを生成するときに選択する必要があります。

使用できるエラー カテゴリの説明については 、System.Management.Automation.ErrorCategory 列挙型に関するページを参照 してください。 一般に、可能な限り **、NoError、UndefinedError、**および GenericError は使用しないようにしてください。

CategoryView に設定すると、ユーザーはカテゴリに基づいてエラー $ErrorView を表示できます

関連項目

コマンドレットの概要

コマンドレット出力の種類

Windows PowerShell リファレンス