【发布时间】:2016-11-09 22:00:10
【问题描述】:
我有一个 PSObject[],我们可以称之为 $DeviceFW,它有两个我关心的孩子:Bay(字符串)和Components(Object[]),它本质上只是一个数组的哈希表。我要做的是将组件导出到 CSV,每行列出相应的 Bay。
$DeviceFW.Components | Export-Csv "FW.csv" -NoTypeInformation 几乎是完美的,只是它缺少 Bay 列和信息。
$DeviceFW | Select Bay,Components | Export-Csv "FW.csv" -NoTypeInformation 具有 Bay 列和正确的信息,但 Components 仅在单个列中显示为“System.Management.Automation.PSObject[]”
不知何故,我需要一种方法来导出扩展的组件,同时为各个托架添加一列。我想到的是一些神奇的方法来从组件选择管道中解决父级的其他属性(Bay),例如:#$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
【问题讨论】:
-
组件的数量是否总是相同的?如果对象名称与
Export-CSV所期望的名称相同,这只会在没有循环的情况下起作用 -
从您的示例中,
$DeviceFW是一个对象数组,而不是对象本身。准确吗?
标签: powershell csv