使用导出Csv

使用导出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属性在这里一定是有效的,并且当前没有地方可以测试这部分。

+0

谢谢。我不知道'PSCustomObject',但它对于很多事情来说似乎是一个很好的工具。我也将'ForEach'混淆为'ForEach-Object'的别名。很混乱! – Philosophene

+1

我能够测试,并做到了。当VM拥有多个IP地址时,我遇到了一个关于PowerShell返回'System.Object []'的问题。我可以通过使用'-join',像这样以解决这样的:'Ip地址=(($ _第[2] .NetworkConnection.IpAddress)-join '')' – Philosophene

的问题是,第二Select后你仍与(过滤)$vm对象的工作和 $vm.secton[2],尽量$vm | Flatten-Object第一。

+0

我不知道拼合-对象。这将在未来有用,因为我一直在努力将信息导出到PowerShell之外。谢谢! – Philosophene