4

次のようなパイプラインにいくつかのオブジェクトがあります。

$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   

ここまでは順調ですね。問題は、パイプライン内の一部のオブジェクトに props がない場合に始まります。

$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 の追加の props はありませんが、「デフォルト」プロパティ objname でまだパイプラインにあります):

val pname objname
--- ----- -------
 11 prop1 obj1   
 xx prop2 obj1  
          obj2

代わりに obj2 がありません:

val pname objname
--- ----- -------
 11 prop1 obj1   
 xx prop2 obj1   

展開するものが何もない場合、ExpandProperty がオブジェクトをそのままにしないのはなぜですか?

4

1 に答える 1