我制作了一个PowerShell脚本,该脚本将接收一批定界的虚拟机IP地址并拍摄每个虚拟机的快照。
我的问题是我每次都为每个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)
}
答案 0 :(得分:2)
只需将Get-VM
调用放在foreach之外,将其分配给变量并改为使用它:
$retrievedVMs = Get-VM
foreach($vm in $vms)
{
$retrievedVMs | where {$_.Guest.IPAddress -match $vm}| New-Snapshot -Name "Patching" -Description (Get-Date)
}