使用导出Csv
我有一些麻烦得到我的脚本格式正确。我尝试使用VMware的powercli从vApp提取主机名和IP信息并将其导出为CSV。使用导出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地址的名称。任何帮助,将不胜感激。
在此先感谢。
我想这个问题可能是因为您输出两个对象,而不是一个在每个迭代。当您将单个对象返回到管道时,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
请注意,如果你现在的样子收集ip地址我不知道而ExternalIPAddress属性在这里一定是有效的,并且当前没有地方可以测试这部分。
的问题是,第二Select
后你仍与(过滤)$vm
对象的工作和不 $vm.secton[2]
,尽量$vm | Flatten-Object
第一。
我不知道拼合-对象。这将在未来有用,因为我一直在努力将信息导出到PowerShell之外。谢谢! – Philosophene
谢谢。我不知道'PSCustomObject',但它对于很多事情来说似乎是一个很好的工具。我也将'ForEach'混淆为'ForEach-Object'的别名。很混乱! – Philosophene
我能够测试,并做到了。当VM拥有多个IP地址时,我遇到了一个关于PowerShell返回'System.Object []'的问题。我可以通过使用'-join',像这样以解决这样的:'Ip地址=(($ _第[2] .NetworkConnection.IpAddress)-join '')' – Philosophene