Powershell:在ConvertTo-HTML中显示数组成员

时间:2011-06-30 11:26:11

标签: powershell

我有一个带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 

2 个答案:

答案 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 ', '}}