【问题标题】:Nested hashtable export in PowerShell?PowerShell中的嵌套哈希表导出?
【发布时间】:2017-12-14 09:39:05
【问题描述】:

我目前正在尝试创建一个易于阅读的文档,其中包含网络上的所有设备 (3k+)。目前我的所有数据都在嵌套的哈希表中,如下所示:

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

它将设备的主机名存储在$devices 中。在$hostname 中有一个哈希表,其中包含与该主机名关联的所有 MAC 地址。在 MAC 地址内有一个哈希表,其中包含与该 MAC 地址关联的所有 IP。

我已经创建了创建哈希表和存储数据的脚本的一部分。我遇到了将数据导出为 CSV 格式的障碍,该格式可以在 Excel 中读取,格式为。

主机名、Mac 地址、IP 地址 服务器1,MM.MM.MM.SS.SS.SS,1.1.1.1 1.1.1.2 MM.MM.MN.SS.SS.SA,1.1.1.3 服务器2,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
        }
    }
}

【问题讨论】:

  • 向我们展示您的代码 :-)
  • 将当前代码添加到帖子中,目前我只有它与哈希表的内容相呼应,我一直在纠结如何格式化所有数据。

标签: powershell export-to-csv


【解决方案1】:

在最里面的循环中创建自定义对象,将输出收集到一个变量中,然后导出数据:

$csv = 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 并创建空白对象属性以防它们与各自的当前值匹配。

【讨论】:

    猜你喜欢
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 2018-10-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多