【发布时间】:2016-05-21 00:17:04
【问题描述】:
我在管道中有一些对象,如下所示:
$arr1 = @(
(New-Object -TypeName psobject -Property @{'objname'='obj1';props=@((new-object -typename psobject -Property @{'pname'='prop1';'val'=11;}),(new-object -typename psobject -Property @{'pname'='prop2';'val'='xx';}))}),
(New-Object -TypeName psobject -Property @{'objname'='obj2';props=@((new-object -typename psobject -Property @{'pname'='prop2';'val'='yy';}),(new-object -typename psobject -Property @{'pname'='prop3';'val'=22;}))})
)
$arr1 | select objname, props
结果:
objname props
------- -----
obj1 {@{val=11; pname=prop1}, @{val=xx; pname=prop2}}
obj2 {@{val=yy; pname=prop2}, @{val=22; pname=prop3}}
我需要展开 props 并在对象名称旁边列出每个展开的属性。再简单不过了:
$arr1 | select objname -ExpandProperty props
结果:
val pname objname
--- ----- -------
11 prop1 obj1
xx prop2 obj1
yy prop2 obj2
22 prop3 obj2
到目前为止一切顺利。当管道中的某些对象没有道具时,问题就开始了:
$arr2 = @(
(New-Object -TypeName psobject -Property @{'objname'='obj1';props=@((new-object -typename psobject -Property @{'pname'='prop1';'val'=11;}),(new-object -typename psobject -Property @{'pname'='prop2';'val'='xx';}))}),
(New-Object -TypeName psobject -Property @{'objname'='obj2';props=@()})
)
$arr2 | select objname,props
结果:
objname props
------- -----
obj1 {@{val=11; pname=prop1}, @{val=xx; pname=prop2}}
obj2 {}
现在我希望,那个命令:
$arr2 | select objname -ExpandProperty props
会返回这样的结果(obj2 没有额外的道具,但它仍在管道中,它的“默认”属性 objname):
val pname objname
--- ----- -------
11 prop1 obj1
xx prop2 obj1
obj2
而是缺少 obj2:
val pname objname
--- ----- -------
11 prop1 obj1
xx prop2 obj1
如果没有可扩展的内容,为什么 ExpandProperty 不会让我的对象不理会?
【问题讨论】:
-
奇怪的一点不是
obj2在扩展属性props时消失(这实际上是包含空数组的属性的预期行为),而是该属性获得了一个额外的元素@987654332 @如果它包含一个对象数组。您应该只看到val和pname列。
标签: powershell pipeline powershell-5.0 psobject pscustomobject