我只是好奇并寻找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
所以我认为不同之处在于,在第一个例子中它返回一个对象,而在第二个例子中它只是一组值。我不明白为什么这会对输出产生影响?
答案 0 :(得分:0)
指定要选择的属性,并指示应尝试扩展该属性。属性名称允许使用通配符。
例如,如果指定的属性是数组,则数组的每个值都包含在输出中。如果属性包含对象,则该对象的属性将显示在输出中。
参数的行为取决于指定的属性 类型 。
在您的第一个示例中,展开access
,其中System.Security.AccessControl.FileSystemAccessRule
数组符合此说明:
如果属性包含对象,则该对象的属性将显示在输出中。
在第二个示例中,AccessToString
是单个字符串或标量。虽然我找不到任何确定的内容,但PowerShell似乎取代了对-Property
的任何引用。
这也包含在blogs.msdn.microsoft.com上。
如果将ExpandProperty应用于不是集合的属性,它只会为您提供值而不是具有属性的对象。
因此,当我们在非集合属性上使用-Expand
时,我们所看到的并不是关于其他指定属性的存在。