我有一个带NoteProperties的对象集合。其中一个属性是数组。 当我使用ConvertTo-HTML时,我想有一种简单的方法来显示这个noteproperty的成员而不仅仅是'[System.Object]'。
例如,我有一个名为“Computername”的属性和一个名为“Disks”的属性,它实际上是该计算机的所有磁盘的数组。 ConvertTo-HTML的输出如下所示:
Computername Disks
fs System.Object[]
dc1 System.Object[]
是否有一种简单的方法可以显示“磁盘”的成员而无需手动创建html输出?
修改
一个Disk-object实际上还有3个值(名称,容量和可用空间)也必须显示。
powershell提示符下的$ collection [0] .Disks的输出可能如下所示(取决于磁盘数量等):
PS > $collection[0].Disks
Bezeichnung Kapazität (MB) Freier Speicher (MB)
----------- -------------- --------------------
C:\ 40963 23040 (56 %)
D:\ 184324 39024 (21 %)
E:\ 204805 103373 (50 %)
我正在考虑的事情就像树首先显示计算机名,然后是该计算机所有磁盘的表。像(可能更漂亮;)):
Computername
fs
Bezeichnung Kapazität (MB) Freier Speicher (MB)
----------- -------------- --------------------
C:\ 40963 23040 (56 %)
D:\ 184324 39024 (21 %)
E:\ 204805 103373 (50 %)
dc1
答案 0 :(得分:6)
在这种情况下,我的常规方法是将数据扩展为更友好的表格格式,而不是花费大量时间自定义HTML。
$collection |
select ComputerName -ExpandProperty Disks |
ConvertTo-Html -Fragment -Property ComputerName,Name,Capacity,'Free Space'
这会扩展每台计算机的磁盘列表,以便每个计算机都显示在表中与计算机名称一起的单独行中。
ComputerName Name Capacity Free Space
------------ ---- -------- ----------
fs C:\ 109324 60986
fs D:\ 289313 281692
dc1 C:\ 290473 12626
dc1 D:\ 283195 125983
dc1 E:\ 105652 13898
答案 1 :(得分:2)
您可以事先将它们转换为字符串:
Get-Foo | foreach { $_.Disks = $_.Disks -join ', ' } | ConvertTo-HTML
或者可能没有实际更改您的对象:
Get-Foo | select Computername,@{L=Disks;E={$_.Disks -join ', '}}