使用Export-Csv

时间:2017-10-29 06:55:50

标签: powershell csv export-to-csv powercli

我在编写正确的脚本格式时遇到了一些麻烦。我正在尝试使用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地址的三列表。任何帮助,将不胜感激。

提前致谢。

2 个答案:

答案 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