2017-07-10 6 views
2

Ich versuche gerade, ein leicht lesbares Dokument zu erstellen, das alle Geräte im Netzwerk (3k +) enthält. Zur Zeit habe ich alle meine Daten innerhalb verschachtelt Hash-Tabellen wie folgt:Verschachtelter Hashtable-Export in PowerShell?

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

Es speichert den Hostnamen des Geräts in $devices. Innerhalb der $hostname gibt es eine Hashtabelle, die alle MAC-Adressen enthält, die diesem Hostnamen zugeordnet sind. Innerhalb der MAC-Adresse gibt es eine Hashtabelle, die alle mit dieser MAC-Adresse verbundenen IPs enthält.

Ich habe bereits einen Teil des Skripts erstellt, der die Hashtable erstellt und die Daten speichert. Ich bin in eine Straßensperre gerannt mit dem Export der Daten in eine CSV, die in Excel mit dem Format von gelesen werden kann.

 
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 

und so weiter.

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

Zeigen Sie uns Ihren Code :-) –

+0

Den aktuellen Code zum Beitrag hinzugefügt, derzeit habe ich nur den Inhalt der Hash-Tabelle und ich bin fest, wie alle Daten zu formatieren. – Kuks35

Antwort

0

benutzerdefinierte Objekte in der innersten Schleife erstellen, die Ausgabe in einer Variablen sammeln, exportieren Sie die Daten:

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 

Wenn Sie ausgeben möchten genau wie Ihr Beispiel (was ich nicht empfehlen würde), müssen Sie die vorherigen $hostname und $MAC verfolgen und leere Objekteigenschaften erstellen, falls diese mit dem jeweiligen aktuellen Wert übereinstimmen.