2011-06-30 13 views
2

私はNotePropertiesを持つオブジェクトのコレクションを持っています。これらのプロパティの1つは配列です。 ConvertTo-HTMLを使用するときに、このNotepropertyのメンバーを '[System.Object]'だけでなく簡単に表示する方法があります。Powershell:ConvertTo-HTMLに配列メンバーを表示

たとえば、「Computername」というプロパティと、実際にはそのコンピュータのすべてのディスクの配列である「Disks」というプロパティがあります。 ConvertTo-HTMLの出力は次のようになります。

Computername Disks 
fs    System.Object[] 
dc1    System.Object[] 

手動でHTML出力を作成せずに、「ディスク」のメンバーを表示する簡単な方法はありますか?

編集:
ディスク・オブジェクトが実際に3つの値(名前、容量と空き領域)も表示する必要がありましたワン。 [0] PowerShellのプロンプトで.Disks $コレクションの 出力は(ディスクカウントなどに応じて)次のようになります。

PS > $collection[0].Disks 

Bezeichnung             Kapazität (MB)            Freier Speicher (MB)          
-----------             --------------            --------------------          
C:\               40963              23040 (56 %)            
D:\               184324              39024 (21 %)            
E:\               204805              103373 (50 %)    

を私はコンピュータ名を示し、ツリーのようなものを考えていました最初にそのコンピュータのすべてのディスクの表を表示します。以下のようなもの(より美しいかもしれない;)):実際にあなたのオブジェクトを変更することなく、多分

Get-Foo | foreach { $_.Disks = $_.Disks -join ', ' } | ConvertTo-HTML 

か::

Computername  
fs    
       Bezeichnung             Kapazität (MB)            Freier Speicher (MB)          
       -----------             --------------            --------------------          
       C:\               40963              23040 (56 %)            
       D:\               184324              39024 (21 %)            
       E:\               204805              103373 (50 %)    
dc1 

答えて

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 
2

あなたは事前に文字列に変換することができます

Get-Foo | select Computername,@{L=Disks;E={$_.Disks -join ', '}} 
+0

お寄せいただきありがとうございます。申し訳ありませんが、私が見せたいディスクあたり3つ(またはそれ以上)の値があることを忘れてしまいました。私は最初にComputernameを表示するツリーと同じものを考え、その下にあるすべてのディスクのテーブルを考えました。 – wullxz

+1

私はこの場合、ConvertTo-HTML以上のものが必要だと思います。私は自分でHTMLを構築することなくこれを行うことができるとは思わない。ただし、ConvertTo-HTMLを使用してディスクテーブルを作成することはできます。 – Joey