PowerShell 中的嵌套哈希表导出?
Nested hashtable export in PowerShell?
我目前正在尝试创建一个易于阅读的文档,其中包含网络上的所有设备 (3k+)。目前我的所有数据都在嵌套哈希表中,如下所示:
$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
}
}
}
在最内层循环中创建自定义对象,将输出收集到变量中,然后导出数据:
$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
并创建空白对象属性以防它们与各自的当前值。
我目前正在尝试创建一个易于阅读的文档,其中包含网络上的所有设备 (3k+)。目前我的所有数据都在嵌套哈希表中,如下所示:
$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
}
}
}
在最内层循环中创建自定义对象,将输出收集到变量中,然后导出数据:
$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
并创建空白对象属性以防它们与各自的当前值。