ErrorRecordオブジェクト
さきほど、2>&1
演算子で代入したエラーはErrorRecord
オブジェクトとなることを説明しました。では、ErrorRecord
オブジェクトにはどのようなメンバーが備わっているかを確認したいと思います。
先ほどの変数$err
に対してGet-Member
コマンドレットを使用し、どのようなメンバーがあるかを確認してみたいと思います。
PS C:\Work> $err | Get-Member TypeName: System.Management.Automation.ErrorRecord Name MemberType Definition ---- ---------- ---------- Equals Method System.Boolean Equals(Object obj) GetHashCode Method System.Int32 GetHashCode() GetObjectData Method System.Void GetObjectData(SerializationInfo info, StreamingContext context) GetType Method System.Type GetType() get_CategoryInfo Method System.Management.Automation.ErrorCategoryInfo get_CategoryInfo() get_ErrorDetails Method System.Management.Automation.ErrorDetails get_ErrorDetails() get_Exception Method System.Exception get_Exception() get_FullyQualifiedErrorId Method System.String get_FullyQualifiedErrorId() get_InvocationInfo Method System.Management.Automation.InvocationInfo get_InvocationInfo() get_TargetObject Method System.Object get_TargetObject() set_ErrorDetails Method System.Void set_ErrorDetails(ErrorDetails value) ToString Method System.String ToString() writeErrorStream NoteProperty System.Boolean writeErrorStream=True CategoryInfo Property System.Management.Automation.ErrorCategoryInfo CategoryInfo {get;} ErrorDetails Property System.Management.Automation.ErrorDetails ErrorDetails {get;set;} Exception Property System.Exception Exception {get;} FullyQualifiedErrorId Property System.String FullyQualifiedErrorId {get;} InvocationInfo Property System.Management.Automation.InvocationInfo InvocationInfo {get;} TargetObject Property System.Object TargetObject {get;}
多くのメンバーを備えていることが確認できます。これらの中から、主要なものについて説明したいと思います。
CategoryInfoプロパティ
このプロパティは文字通り、エラーの種類についての情報が格納されています。
PS C:\Work> $err.CategoryInfo Category : InvalidArgument Activity : New-Item Reason : ArgumentException TargetName : C:\Work\HO*GE TargetType : String
Categoryが「InvalidArgument」となっていることが分かります。これはdir
コマンドに対して、無効な文字が含まれたパスを指定しているためです。さらにReason(発生理由)をみると、「ArgumentException」という例外が発生したことが分かります。
Exceptionプロパティ
Exception
プロパティ自体もさまざまなメンバーを持っていますが、規定のプロパティはMessageとなっており、エラーの内容を確認することができます。
PS C:\Work> $err.Exception パスに無効な文字が含まれています。
InvocationInfoプロパティ
このプロパティはエラーの発生場所に関する情報が格納されます。PositionMessageの欄を見ると、「1行目の34文字目でエラーが発生した」ということを確認できます。
PS C:\Work> $err.InvocationInfo MyCommand : New-Item ScriptLineNumber : 1 OffsetInLine : -2147483648 ScriptName : Line : param([string[]]$paths); New-Item -type directory -path $paths PositionMessage : 発生場所 行:1 文字:34 + param([string[]]$paths); New-Item <<<< -type directory -path $paths InvocationName : New-Item PipelineLength : 1 PipelinePosition : 1
TargetObjectプロパティ
このプロパティには、エラー発生時の操作対象オブジェクトが格納されます。ただし、すべてのエラーがこのプロパティを設定するわけではないため、Null
の場合もあります。
PS C:\Work> $err.TargetObject C:\Work\HO*GE
このようにErrorRecord
オブジェクトには、エラーの原因を解明する上で役立つ情報が格納されています。