Get-Member在使用管道时显示不正确的属性

时间:2012-12-10 20:31:43

标签: powershell

wwwroot> $nsmgr.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    XmlNamespaceManager                      System.Object

wwwroot> Get-Member -InputObject $nsmgr

   TypeName: System.Xml.XmlNamespaceManager

wwwroot> $nsmgr | Get-Member

   TypeName: System.String

似乎Get-Member在第一次Get-Member调用中是字符串转换为字符串,但对于像Get-Member这样的Cmdlet来说,这似乎是非常奇怪的行为。

我已阅读How to use PowerShell Get-Member cmdlet,但我不相信这是同一个问题。

1 个答案:

答案 0 :(得分:5)

XmlNamespaceManager实现IEnumerable,因此PowerShell将在管道中输出XmlNamespaceManager中包含的项。为了防止您使用逗号运算符:

,$nsmgr | Get-Member

这将在XmlNamespaceManager周围创建一个简单的数组包装器,以便它沿管道而不是其内容传播。