У меня есть несколько объектов в конвейере, примерно так:
$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}}
Мне нужно развернуть свойства и перечислить каждое расширенное свойство рядом с именем объекта. Нет ничего проще:
$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
(это фактически ожидаемое поведение для свойства, содержащего пустой массив), а в том, что свойство получает дополнительный элементobjname
, если оно содержит массив объектов. Вы должны видеть только столбцыval
иpname
. - person Ansgar Wiechers   schedule 11.02.2016