最近、get-member を使用して実行すると、リストされていないもののプロパティにアクセスできることがわかりました。
カスタム psobject を使用して説明する例を次に示します。
最初に、ハッシュテーブルを作成します (後で psobject を作成するために使用します)。
$MyHashtable = @{'column1'="aaa";
'column2'="bbb";
'column3'="ccc"
}
次に、psobject を作成します。
PS C:\> $MyNewObject = New-Object -TypeName PSObject -Property $MyHashtable
この新しいオブジェクトを get-member で実行すると、次のように表示されます。
PS C:\> $MyNewObject | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
column1 NoteProperty System.String column1=aaa
column2 NoteProperty System.String column2=bbb
column3 NoteProperty System.String column3=ccc
これまでのところ、非常に良好です (ただし、「PSObject」というプロパティが上記のリストに含まれていないのではないかと思いますが、これについてはこれから説明します)。
しかし、私が今行う場合:
PS C:\> $MyNewObject.PSObject
Members : {System.String column1=aaa, System.String column2=bbb, System.String column3=ccc, string ToString()...}
Properties : {System.String column1=aaa, System.String column2=bbb, System.String column3=ccc}
Methods : {string ToString(), bool Equals(System.Object obj), int GetHashCode(), type GetType()}
ImmediateBaseObject :
BaseObject :
TypeNames : {System.Management.Automation.PSCustomObject, System.Object}
これはうまくいきました!Get-Member を介してオブジェクトを渡したときに "PSObject" がプロパティとしてリストされていなかったので、どうしてそれが可能なのでしょうか。
誰かが助けてくれることを願っています。