我有2台主机都与Server 2016 Datacenter
在每个主机上,我有2个虚拟机当前使用共享存储的Dev
我可以做所有的集群事情,即实时迁移,移动存储,
我一直在寻找一个脚本,以便能够同时保存群集中的所有虚拟机。
如果我运行这个:
$clusterNodes = Get-ClusterNode; $Name = ForEach($item in $clusterNodes){Get-VM -ComputerName $item.Name; } {save-VM -ComputerName $item.Name; }
它将保存虚拟机的然而,它会提示我两次为每个主机虚拟机的名称。
我的最终目标是能够从一台PC重新configuration群集中的所有虚拟机,而虚拟机的移动也非常多,所以它们并不总是在同一台主机上。
例:
保存所有的虚拟机
移动共享存储器的位置:
Set-VM pv02 -SnapshotFileLocation C:\ClusterStorage\Volume1\pv02 Set-VM pv02 -SmartPagingFilePath C:\ClusterStorage\Volume1\pv02 Set-VMHardDiskDrive -VMName pv02 -ControllerType SCSI -Path C:\ClusterStorage\Volume1\pv02\pv02.vhdx
启动虚拟机
如果我单独login到每个主机,命令将运行良好,但是在我的生产中,我有7台主机,大约有100个虚拟机。
如果您想从PowerShell处理整个群集,最好的解决scheme可能是System Center Virtual Machine Manager中的PowerShell模块。 它是为此而build造的。
您使用的PowerShell模块是用于单主机脚本的。 它仍然可以工作。 您可以重构上面的代码。 举个例子:
$clusterNodeNames = (Get-ClusterNode -Cluster ClusterName).Name $AllVMsInCluster = Get-VM -ComputerName $clusterNodeNames $AllVMsInCluster | Save-VM -Confirm:$false