6

最近、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" がプロパティとしてリストされていなかったので、どうしてそれが可能なのでしょうか。

誰かが助けてくれることを願っています。

4

1 に答える 1