为什么PowerCLI脚本使用get-vm创建重复记录?

时间:2019-07-23 15:01:59

标签: powershell vmware powercli

我正在尝试构建一个脚本,该脚本将从多个vSphere Server中提取VM列表。至此,它可以完成我想要的操作,但是不幸的是,它还在结果.csv文件中创建了重复的值。

仅注意serverlist.txt和vicredentials.xml包含相同的唯一服务器。

Import-Module VMware.VimAutomation.Core
Set-PowerCLIConfiguration -DefaultVIServerMode Multiple -Confirm:$false

if (Test-Path 'E:\vSphereScript\vCenterVMList.csv'){Remove-Item 'E:\vSphereScript\vCenterVMList.csv'}

$serverList = Get-Content -Path "E:\vSphereScript\serverlist.txt" 

foreach ($server in $serverList) {
$creds  = Get-VICredentialStoreItem -file "vSphereScript\vicredentials.xml" -Host $server
Connect-VIServer -server $creds.host -user $creds.user -password $creds.password
Get-VM | Select-Object Name, Guest, VMhost, ResourcePool | Export-Csv -Path "E:\ProgramData\vCenterVMList.csv" -NoTypeInformation -Append
Disconnect-VIServer $server -Confirm:$false

}

还有人知道为什么这么慢吗? 如果我直接从powershell连接到vm并使用Get-VM,那几乎是瞬时的

1 个答案:

答案 0 :(得分:0)

我没有发现您的代码有任何根本上的错误,但确实有几件事要引起注意:

  • 如果一次仅连接到一个vCenter,为什么将DefaultVIServerMode设置为Multiple?
  • 当您说重复时,是vCenter中的整个VM清单还是仅特定的VM?
  • 是来自单个vCenter还是多个vCenter的重复VM?
  • 您是否正在使用任何基于复制的软件? (例如:SRM)

关于速度,Get-VM很快。但是,与vCenter Server连接和断开连接并不是特别快速的操作。