ほとんどの場合、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 オブジェクトは、エラーが発生した環境を説明する情報を提供することもできます。 この情報には、エラーの詳細、呼び出し情報、エラー発生時に処理されていたターゲット オブジェクトなどの項目が含まれます。 この情報はホスト アプリケーションに役立つ場合がありますが、通常はエラーの特定には使用されません。 この情報は、次のプロパティを使用して使用できます。
こちらもご覧ください
コマンドレット に終了しないエラーレポートを追加する
PowerShell