为什么Get-Member没有提供所有属性和方法的完整列表。

时间:2013-08-23 11:21:37

标签: powershell

我最近发现,当通过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”没有被列为属性。

希望有人可以提供帮助。

1 个答案:

答案 0 :(得分:4)

使用Get-Member -Force查看所有成员

  

-Force [SwitchParameter]       添加内在成员(PSBase,PSAdapted,PSObject,PSTypeNames)和       编译器生成的get_和set_方法到显示器。默认情况下,Get-Member       在“Base”和“Adapted”之外的所有视图中获取这些属性,但确实如此       不显示它们。