我在编写正确的脚本格式时遇到了一些麻烦。我正在尝试使用powercli与VMware从vApp中提取主机名和IP信息并将其导出为CSV。
到目前为止,我有:
Received data (html length): 17026
Parsed data (object length): 0
<Unexpected result>
问题似乎是我将值赋给$vapp = Get-CIVApp -name name_of_vApp
$vms = $vapp.ExtensionData.Children.vm
$output = foreach ($vm in $vms) {$vm | select-object -Property Name;$vm.Section[2].NetworkConnection | select-object -Property IpAddress,ExternalIpAddress;}
$output | export-csv -Path c:\temp\test.csv -NoTypeInformation
的行。由于某种原因,它不会添加IP信息,即使它在函数外部工作,甚至在没有$ vm.name的函数内部也是如此。它只是给我机器名,用空行分隔,等于服务器的IP地址数。
我的最终目标是拥有一个包含服务器名称,内部IP地址和外部IP地址的三列表。任何帮助,将不胜感激。
提前致谢。
答案 0 :(得分:1)
我认为问题可能是因为您在每次迭代中输出两个对象而不是一个。将单个对象返回到管道时,PowerShell通常效果最佳。在这种情况下,您可以使用带有属性哈希表的[pscustomobject]类型来执行此操作。
我还认为使用ForEach-Object
代替ForEach
是有道理的,因为您可以将输出直接传递到Export-CSV
:
$vapp = Get-CIVApp -name name_of_vApp
$vms = $vapp.ExtensionData.Children.vm
$vms | ForEach-Object {
[pscustomobject]@{
Name = $_.name
IpAddress = ($_.Section[2].NetworkConnection.IpAddress)
ExternalIpAddress = ($_.Section[2].NetworkConnection.ExternalIpAddress)
}
} | Export-CSV -Path c:\temp\test.csv -NoTypeInformation
请注意,我不知道您收集IPAddress和ExternalIPAddress属性的方式在这里是否有效,并且目前还没有地方可以测试此部分。
答案 1 :(得分:1)
问题是,在第二个Select
之后,您仍然使用(已过滤的)$vm
对象且不是
$vm.secton[2]
,首先尝试$vm | Flatten-Object
。