gpt4 book ai didi

powershell - 在管道中访问父属性

转载 作者:行者123 更新时间:2023-12-03 00:29:47 25 4
gpt4 key购买 nike

我有一个PSObject [],我们可以称它为$DeviceFW,它有两个我关心的 child :Bay(字符串)和Components(Object []),它实际上只是一个哈希表数组。我想做的是将Components导出到CSV,并在每一行中列出相应的托架。
$DeviceFW.Components | Export-Csv "FW.csv" -NoTypeInformation几乎是完美的,除了缺少Bay列和信息。
$DeviceFW | Select Bay,Components | Export-Csv "FW.csv" -NoTypeInformation具有Bay列和正确的信息,但是Components仅在单个列中显示为“System.Management.Automation.PSObject []”

我以某种方式需要一种导出扩展的组件的方法,同时包括用于各个托架的列。我想到的是从Components Select管道中解决父项的其他属性(托架)的一种神奇方法,例如:#$DeviceFW.Components | Select-Object @{Name='Bay';Expression={$_.Parent.Bay}},*。我对PowerShell还是很陌生,所以我确定这是完全不可行的。也许我应该只用一个循环来解决它,而放弃管道?

下面是我所追求的例子...

$DeviceFW:
Bay: 1
Components: {@{Name=ROM;Ver=A;ISO=A},@{Name=PWR;Ver=B;ISO=B}}
Bay: 2
Components: {@{Name=ROM;Ver=C;ISO=C},@{Name=PWR;Ver=D;ISO=D}}

...应输出为:
Bay | Name | Ver | ISO
-----------------------
1 | ROM | A | A
-----------------------
1 | PWR | B | B
-----------------------
2 | ROM | C | C
-----------------------
2 | PWR | D | D

最佳答案

从您给出的示例中,我按如下所示构造了数组/对象:

$DeviceFW = @(
[PSCustomObject]@{
'Bay' = '1'
'Components'=@(
[pscustomobject]@{'Name'='ROM';'Ver'='A';'ISO'='A'},
[pscustomobject]@{'Name'='PWR';'Ver'='B';'ISO'='B'}
)},
[PSCustomObject]@{
'Bay' = '2'
'Components'=@(
[pscustomobject]@{'Name'='ROM';'Ver'='C';'ISO'='C'},
[pscustomobject]@{'Name'='PWR';'Ver'='D';'ISO'='D'}
)}
)

那是一个对象数组,每个对象包含两个属性, Bay是字符串, Components是对象数组。 Components中的每个对象都包含三个属性 NameVerISO,每个属性都是一个字符串。当我执行 $DeviceFW|FL时,我得到:
Bay        : 1
Components : {@{Name=ROM; Ver=A; ISO=A}, @{Name=PWR; Ver=B; ISO=B}}

Bay : 2
Components : {@{Name=ROM; Ver=C; ISO=C}, @{Name=PWR; Ver=D; ISO=D}}

到目前为止,与您的示例相符。为了获得想要的所需CSV,我将其放入ForEach循环中,如下所示:
Foreach($record in $DeviceFW){
$record.components|select @{l='Bay';e={$record.bay}},*|Export-Csv c:\temp\output.csv -NoTypeInformation -Append
}

输出文件:
"Bay","Name","Ver","ISO"
"1","ROM","A","A"
"1","PWR","B","B"
"2","ROM","C","C"
"2","PWR","D","D"

关于powershell - 在管道中访问父属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26474470/

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