批量快照 PowerCLI 脚本性能低下

Batch snapshot PowerCLI script slow performance

我制作了一个 powershell 脚本,它将接收一批分隔的 VM IP 地址并拍摄每个 VM 的快照。

我的问题是我每次都为每个 VM 调用 Get-VM,这显然很慢。我想知道是否有人可以看到另一种方法来执行相同的操作而不必每次都调用它?

Add-PSSnapin VMware.VimAutomation.Core
$VCServer = "vc"

Connect-VIServer $VCServer
[array]$vms = (Read-Host “List of IP's (separate with comma)”).split(“,”) | %{$_.trim()}
foreach($vm in $vms)
    {
    Get-VM | where {$_.Guest.IPAddress -match $vm}| New-Snapshot -Name "Patching" -Description (Get-Date)
    }

只需将 Get-VM 调用放在 foreach 之外,将其分配给一个变量并改为使用它:

$retrievedVMs = Get-VM
foreach($vm in $vms)
{
    $retrievedVMs | where {$_.Guest.IPAddress -match $vm}| New-Snapshot -Name "Patching" -Description (Get-Date)
}