2017-07-10 2 views
2

J'essaye actuellement de créer un document facile à lire contenant tous les périphériques sur le réseau (3k +). À l'heure actuelle, j'ai toutes mes données dans hashtables imbriquées comme ceci:Exportation de hashtable imbriquée dans PowerShell?

$devices = @{"hostname" = @{"Mac Address" = @{"IP Address" = "True or False"}}} 

Il stocke le nom d'hôte du dispositif $devices. Au sein du $hostname, il y a une table de hachage contenant toutes les adresses MAC associées à ce nom d'hôte. Dans l'adresse MAC, il y a une table de hachage contenant toutes les adresses IP associées à cette adresse MAC.

J'ai déjà créé une partie du script qui crée la table de hachage et stocke les données. J'ai couru dans un barrage routier avec l'exportation des données dans un fichier CSV qui peut être lu dans Excel avec le format de.

 
Hostname, Mac Address, IP Address 
server1, MM.MM.MM.SS.SS.SS , 1.1.1.1 
          1.1.1.2 
     MM.MM.MN.SS.SS.SA , 1.1.1.3 
server2, MM.MM.MB.SS.SS.ST , 1.2.3.1 
          , 1.5.2.1 

et ainsi de suite.

Edit:

foreach ($hostname in $devices.Keys) { 
    echo $hostname 
    foreach ($Macs in $devices.$hostname.Keys) { 
     echo $Macs 
     foreach ($IPs in $devices.$hostname.$Macs.Keys) { 
      echo $IPs 
     } 
    } 
} 
+0

Montrez-nous votre code :-) –

+0

Ajouté le code actuel à la poste, actuellement je l'ai seulement en écho le contenu de la table de hachage et je suis bloqué sur la façon de formater toutes les données. – Kuks35

Répondre

0

Créer des objets personnalisés dans votre boucle interne, recueillez la sortie dans une variable, puis exporter les données:

foreach ($hostname in $devices.Keys) { 
    foreach ($MAC in $devices.$hostname.Keys) { 
     foreach ($IP in $devices.$hostname.$Macs.Keys) { 
      [PSCustomObject]@{ 
       'Hostname' = $hostname 
       'MAC Address' = $MAC 
       'IP Address' = $IP 
      } 
     } 
    } 
} 

$csv | Export-Csv 'C:\path\to\output.csv' -NoType 

Si vous voulez sortie exactement comme votre exemple (que je ne recommanderais pas) vous devez garder la trace de la précédente $hostname et $MAC et créer des propriétés d'objet vides dans le cas où ceux-ci correspondent à la valeur actuelle respective.