2017-07-10 80 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,并创建空白的对象属性,以防当前值匹配。