gpt4 book ai didi

powershell - ExpandProperty - 管道中缺少的对象

转载 作者:行者123 更新时间:2023-12-04 00:34:51 28 4
gpt4 key购买 nike

我在管道中有一些对象,如下所示:

$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}}

我需要展开 Prop 并在对象名称旁边列出每个展开的属性。没有更简单的:
$arr1 | select objname -ExpandProperty props

结果:
val pname objname
--- ----- -------
11 prop1 obj1
xx prop2 obj1
yy prop2 obj2
22 prop3 obj2

到现在为止还挺好。当管道中的某些对象没有 Prop 时,问题就开始了:
$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 没有额外的 Prop ,但它仍然在管道中,它的“默认”属性 objname):
val pname objname
--- ----- -------
11 prop1 obj1
xx prop2 obj1
obj2

相反,缺少 obj2:
val pname objname
--- ----- -------
11 prop1 obj1
xx prop2 obj1

如果没有可扩展的对象,为什么 ExpandProperty 不会让我的对象单独存在?

最佳答案

所以这是 ExpandProperty 的一个有趣用法。在文档中,它指出“如果指定了 Property 参数,Select-Object 将尝试将每个选定的属性作为 NoteProperty 添加到每个输出对象。” ( https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-object?view=powershell-3.0 )

所以发生的事情是你告诉它从 $arr2 数组中选择 objname 属性,并在你展开时将它作为注释属性添加到 props 中的每个项目。你没有看到 obj2 的原因是因为它没有 Prop ,所以没有对象可以添加 objname。

当然,这是没有意义的,当我阅读文档时,我做了两次检查。也许其他人可以启发我了解他们为什么添加这种行为。有点奇怪。这就是为什么它看起来像这样。

关于powershell - ExpandProperty - 管道中缺少的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35318709/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com