尝试收集虚拟机的几个属性,但由于某些原因,输出中的所有条目都只包含有关最后一个虚拟机的信息。
$CSV
基本上包含了几个虚拟机名称:
VMName
Centos1
Centos2
这是我正在使用的代码:
$VMdata = @()
$line = '' | Select VMName, VMToolStatus, VMToolVersion, UUID, Tag, Notes
foreach($entry in $csv){
$line.VMName = $entry.VMname
$line.VMToolStatus = (get-vm $entry.VMname).ExtensionData.Guest.ToolsRunningStatus
$line.VMToolVersion = (get-vm $entry.VMname).ExtensionData.Guest.ToolsVersion
$line.UUID = (get-vm $entry.VMname).ExtensionData.Config.UUID
$line.Notes = (get-vm $entry.VMname).Notes
$line.Tag = get-vm $entry.VMname | Get-TagAssignment | Select -ExpandProperty Tag | select Name
$VMdata += $line
}
$VMdata | Export-Csv -Path c:\report.csv -NoTypeInformation -Force
这里是CSV输出 - 正如您所看到的,两行都包含了有关VM Centos2的信息。
"VMName","VMToolStatus","VMToolVersion","UUID","Tag","Notes","StartupOrder"
"CentOS2","guestToolsRunning","2147483647","564d7fd7-e58f-e546-ecdf-c347e35cd453",,"Test Note",
"CentOS2","guestToolsRunning","2147483647","564d7fd7-e58f-e546-ecdf-c347e35cd453",,"Test Note",
当我进行调试时,我可以看到在第一个循环后,
$line
已经更新为VM Centos1的正确信息,然后将其添加到$VMData
中。
然而,当第二个循环开始时,例如执行line.VMName = $entry.VMname
后,我发现两个变量$line
和$VMdata
都被更新为CentOS2名称。
$VMdata
会随着$line
一起更新?我之前使用过这段代码,它运行得很好。
我正在运行以下版本的PS。
Major Minor Build Revision
----- ----- ----- --------
5 1 14393 1480
VMware PowerCLI 6.5 Release 1版本编号为4624819。