使用 Export-Csv

Using Export-Csv

我在为我的脚本设置正确的格式时遇到了一些问题。我正在尝试将 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 地址的三列 table。任何帮助,将不胜感激。

提前致谢。

我认为问题可能是因为您在每次迭代中输出两个对象而不是一个对象。当您 return 将单个对象添加到管道时,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 属性的方式在这里是否一定有效,目前没有地方可以测试这部分。

问题是,在第二个 Select 之后,您仍在使用(过滤后的)$vm 对象并且 不是 $vm.secton[2],先尝试