寻求Powershell ExpandProperty行为的解释

时间:2017-12-14 11:38:01

标签: powershell properties return-value acl expand

我只是好奇并寻找expandProperty开关行为的解释。

有时:

some-command | select-object property1, property2 -expand property3

会给:

Property1 Property2 property3
aaaaaaa   bbbbbb    c
aaaaaaa   bbbbbb    d

但是,有时你得到:

Property3
c
d

说明上述内容的真实例子:

Get-Acl | select PSChildname, owner -ExpandProperty Access

Get-Acl | select PSChildname, owner -ExpandProperty AccessToString

所以我认为不同之处在于,在第一个例子中它返回一个对象,而在第二个例子中它只是一组值。我不明白为什么这会对输出产生影响?

1 个答案:

答案 0 :(得分:0)

Select-Object

上的文档的强制性引用
  

指定要选择的属性,并指示应尝试扩展该属性。属性名称允许使用通配符。

     

例如,如果指定的属性是数组,则数组的每个值都包含在输出中。如果属性包含对象,则该对象的属性将显示在输出中。

参数的行为取决于指定的属性 类型

在您的第一个示例中,展开access,其中System.Security.AccessControl.FileSystemAccessRule数组符合此说明:

  

如果属性包含对象,则该对象的属性将显示在输出中。

在第二个示例中,AccessToString是单个字符串或标量。虽然我找不到任何确定的内容,但PowerShell似乎取代了对-Property的任何引用。

这也包含在blogs.msdn.microsoft.com上。

  

如果将ExpandProperty应用于不是集合的属性,它只会为您提供值而不是具有属性的对象。

因此,当我们在非集合属性上使用-Expand时,我们所看到的并不是关于其他指定属性的存在。