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.VoidGetObjectData(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オブジェクトには、エラーの原因を解明する上で役立つ情報が格納されています。

GetObjectData(SerializationInfo info, StreamingContext context)
GetType Method System.Type GetType()
get_CategoryInfo Method