2011-06-30 2 views
2

J'ai une collection d'objets avec NoteProperties. L'une de ces propriétés est un tableau. Je voudrais avoir un moyen facile d'afficher les membres de cette propriété note non seulement '[System.Object]' lorsque j'utilise ConvertTo-HTML. Par exemple, j'ai une propriété appelée "Computername" et une appelée "Disks" qui est en fait un tableau de tous les disques de cet ordinateur. La sortie de ConvertTo HTML ressemble à ceci:Powershell: Afficher les membres de tableau dans ConvertTo-HTML

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

est-il un moyen facile d'afficher les membres de « disques » sans créer manuellement la sortie html?

Edit:
Un disque-objet a en fait 3 valeurs (nom, la capacité et l'espace libre) qui doivent être montré trop. La sortie de $ collection [0] .Disks sur l'invite de Powershell pourrait ressembler à ceci (selon les disques de comptage et ainsi de suite):

PS > $collection[0].Disks 

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

Je pensais à quelque chose comme un arbre qui montre la computername d'abord, puis une table de tous les disques de cet ordinateur. Quelque chose comme (peut-être plus beau;)):

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

Répondre

6

Mon L'approche normale dans ce genre de cas est d'étendre les données dans un format plus convivial, plutôt que de passer beaucoup de temps à personnaliser le HTML.

$collection | 
    select ComputerName -ExpandProperty Disks | 
    ConvertTo-Html -Fragment -Property ComputerName,Name,Capacity,'Free Space' 

Cela élargit la liste des disques pour chaque ordinateur, de sorte que chacune apparaît dans une ligne distincte de la table le long du côté le nom de l'ordinateur.

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

Vous pouvez les convertir en une chaîne préalable:

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

ou peut-être sans changer vos objets:

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

Merci pour votre suggestion. Je suis désolé d'avoir oublié de dire qu'il y a 3 (ou plus dans le futur) valeurs par disque que je veux montrer. J'ai pensé à quelque chose de semblable à un arbre pour montrer le nom de l'ordinateur d'abord, puis une table de tous les disques en dessous. – wullxz

+1

Je pense que dans ce cas, vous avez besoin de plus d'un seul ConvertTo-HTML. Je ne pense pas que vous puissiez le faire sans construire du HTML vous-même. Vous pouvez toujours créer les tables de disque avec ConvertTo-HTML, cependant. – Joey

Questions connexes