我有一些困难,使格式正确的我的脚本。我试图使用powercli与VMware一起,从vApp中提取主机名和IP信息,并将其导出到CSV。
到目前为止,我已经:
$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问题似乎是我给$output赋值的行。由于某些原因,它没有添加IP信息,即使这在函数之外工作,甚至在没有$vm.name的函数中也是如此。它只是给出了机器名,用等于服务器的IP地址数的空行分隔。
我的最终目标是有一个包含服务器名称、内部IP地址和外部IP地址的三列表。任何帮助都将不胜感激。
提前谢谢。
发布于 2017-10-29 07:27:22
我认为问题可能是因为您在每次迭代中输出两个对象而不是一个对象。当您将单个对象返回到管道时,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属性的方式在这里是否一定有效,并且目前没有地方测试这个部分。
发布于 2017-10-29 07:37:32
问题是,在第二个Select之后,您仍然使用(筛选的) $vm对象而不是$vm.secton[2],首先尝试使用$vm | Flatten-Object。
https://stackoverflow.com/questions/46997605
复制相似问题