寻求解释Powershell ExpandProperty行为



我只是好奇,正在寻找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

所以我相信区别在于,在第一个示例中,它正在返回一个对象,第二个只是一组值。我不明白的是为什么这会对输出有所不同?

select-object上的文档的强制性引用

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

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

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

在您的第一个示例中,您会展开access,这是System.Security.AccessControl.FileSystemAccessRule的数组,适合以下描述:

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

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


这也可以在blogs.msdn.microsoft.com上介绍。

如果将ExpandProperty应用于不是集合的属性,它仅会给您提供属性的值。

因此,当我们在非收集属性上使用 -Expand时,我们与其他指定属性的存在相符。

最新更新