我最近发现我可以访问通过 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”没有被列为属性。
希望有人可以提供帮助。