ErrorRecord オブジェクトを解釈する

ほとんどの場合 、System.Management.Automation.ErrorRecord オブジェクトは、コマンドまたはスクリプトによって生成された終了しないエラーを表します。 エラーを終了すると 、System.Management.Automation.Icontainserrorrecord インターフェイスを介して ErrorRecord の追加情報を指定することもできます。

コマンドまたはスクリプトの実行中に発生する特定のエラーを処理するために、スクリプトまたはホストにエラー ハンドラーを記述する場合は 、System.Management.Automation.ErrorRecord オブジェクトを解釈して、処理するエラーのクラスを表すかどうかを判断する必要があります。

コマンドレットで終了エラーまたは終了しないエラーが発生した場合は、エラー状態を記述するエラー レコードを作成する必要があります。 ホスト アプリケーションは、これらのエラー レコードを調査し、エラーを軽減するアクションを実行する必要があります。 また、ホスト アプリケーションは、レコードの処理に失敗したが続行できた非終了エラーのエラー レコードを調査する必要があります。また、パイプラインが停止する原因となるエラーが終了した場合は、エラー レコードを調査する必要があります。

注意

終了エラーの場合、コマンドレットは System.Management.Automation.Cmdlet.Throwterminatingerror* メソッドを呼び出 します。 終了しないエラーの場合、コマンドレットは System.Management.Automation.Cmdlet.WriteError メソッドを呼び出 します。

エラー レコードの設計

エラー レコードは、例外で使用できない追加のエラー情報を提供するように設計され、各エラー レコードの結合された情報が一意である必要があります。 この一意性により、ホスト アプリケーションは、エラー状態とホストが実行する必要があるアクションを識別できるよう、エラー レコードの異なる部分を検査できます。

エラー レコードの解釈

エラー レコードの複数の部分を確認して、エラーを特定できます。 これらの部分には、次のものが含まれます。

  • エラー カテゴリ

  • エラー例外

  • 完全修飾エラー識別子 (FQID)

  • その他の情報

エラー カテゴリ

エラー レコードのエラー カテゴリは 、System.Management.Automation.Errorcategory 列挙体によって提供される定義済みの定数の 1 つです。 この情報は 、System.Management.Automation.ErrorRecord オブジェクトの System.Management.Automation.ErrorRecord.CategoryInfo プロパティ を使用して取得 できます。

コマンドレットでは、CloseError、OpenError、InvalidType、ReadError、WriteError の各カテゴリ、その他のエラー カテゴリを指定できます。 ホスト アプリケーションは、エラー カテゴリを使用して、エラーのグループをキャプチャできます。

例外

エラー レコードに含まれる例外は コマンドレットによって提供され、System.Management.Automation.ErrorRecordオブジェクトのSystem.Management.Automation.ErrorRecord.Exception*プロパティを使用してアクセスできます。

ホスト アプリケーションでは、 キーワードを使用して、例外が特定のクラスまたは派生クラス is の例外を識別できます。 次の例に示すように、例外の種類で分岐する方が良いです。

if (MyNonTerminatingError.Exception is AccessDeniedException)

この方法では、派生クラスをキャッチします。 ただし、例外が逆シリアル化されている場合は問題があります。

The FQID

FQID は、エラーを識別するために使用できる最も具体的な情報です。 これは、コマンドレット定義の識別子、コマンドレット クラスの名前、およびエラーを報告したソースを含む文字列です。 一般に、エラー レコードは、イベント ログのイベント Windowsに類似しています。 FQID は、イベント レコードのクラス (ログ名、ソース、イベント ID)を識別する次のタ プルに**類似しています

FQID は、1 つの文字列として検査するように設計されています。 ただし、エラー識別子がホスト アプリケーションによって解析されるケースが存在します。 次の例は、整形式の完全修飾エラー識別子です。

CommandNotFoundException,Microsoft.PowerShell.Commands.GetCommandCommand.

前の例では、最初のトークンはエラー識別子で、その後にコマンドレット クラスの名前が続きます。 エラー識別子には 1 つのトークンを指定できます。または、識別子の検査時に分岐できるドット区切りの識別子を指定できます。 エラー識別子に空白や句読点を使用しない。 特に、コンマを使用しない方が重要です。識別子とコマンドレット クラス名Windows PowerShell区切る場合は、コンマを使用します。

その他の情報

System.Management.Automation.ErrorRecordオブジェクトは、エラーが発生した環境を記述する情報も提供する場合があります。 この情報には、エラーの詳細、呼び出し情報、エラーの発生時に処理されたターゲット オブジェクトなどの項目が含まれます。 この情報はホスト アプリケーションに役立つ場合があります。ただし、通常はエラーを識別するために使用されません。 この情報は、次のプロパティを使用して取得できます。

System.Management.Automation.ErrorRecord.ErrorDetails

System.Management.Automation.ErrorRecord.InvocationInfo

System.Management.Automation.ErrorRecord.TargetObject

参照

System.Management.Automation.ErrorRecord

System.Management.Automation.Errorcategory

System.Management.Automation.Errorcategoryinfo

System.Management.Automation.Cmdlet.WriteError

System.Management.Automation.Cmdlet.Throwterminatingerror*

終了しないエラーのレポートをコマンドレットに追加する

Windows PowerShell エラー レポート

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