2017-07-10 123 views
2

我正在嘗試創建一個易於閱讀的文檔,其中包含網絡上的所有設備(3k +)。目前,我有我的嵌套哈希表中的所有數據,像這樣:在PowerShell中嵌套散列表導出?

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

它存儲在$devices設備的主機名。在$hostname內有一個哈希表,其中包含與該主機名關聯的所有MAC地址。在MAC地址中有一個散列表,其中包含與該MAC地址關聯的所有IP。

我已經創建了一部分腳本來創建散列表並存儲數據。我遇到了一個將數據導出爲CSV格式的道路塊,該格式可以在Excel中讀取。

 
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 

等等。

編輯:

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

向我們顯示您的代碼:-) –

+0

將新的當前代碼添加到帖子中,目前我只有它回顯哈希表的內容,我堅持如何格式化所有數據。 – Kuks35

回答

0

在你內心的循環創建自定義對象,收集在一個可變輸出,然後導出數據:

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 

如果你想輸出酷似你的榜樣(我不推薦),你需要跟蹤以前的$hostname$MAC,並創建空白的對象屬性,以防當前值匹配。