如何使用Powershell管理Hyper-v Cluser


12

我有2台主机都与Server 2016 Datacenter一起使用

在每个主机上,我有2个VM当前使用共享存储的Dev

我可以完成所有群集工作,例如,实时迁移,移动存储,

我一直在谷歌各处寻找一个脚本,以便能够同时将所有虚拟机保存在群集中。

如果我运行此:

$clusterNodes = Get-ClusterNode;
$Name = ForEach($item in $clusterNodes){Get-VM -ComputerName $item.Name; }
{save-VM -ComputerName $item.Name; }

它将保存虚拟机,但是会提示我两次输入虚拟机名称,每个主机一次。

我的总体目标是能够从一台PC重新配置群集中的所有VM,并且使VM进行很多移动,因此它们并不总是位于同一主机上。

例:

保存所有虚拟机

移出共享存储:

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

启动虚拟机

如果我分别登录每个主机,该命令将正常运行,但是在我的生产环境中,我有7台主机,其中包含约100个VM。

Answers:


8

如果要通过PowerShell处理整个群集,最好的解决方案可能是System Center Virtual Machine Manager中的PowerShell模块。它是为此而建造的。

您正在使用的PowerShell模块旨在用于单主机脚本编写。它仍然可以工作。您可以在上面重组代码。举个例子:

$clusterNodeNames = (Get-ClusterNode -Cluster ClusterName).Name
$AllVMsInCluster = Get-VM -ComputerName $clusterNodeNames
$AllVMsInCluster | Save-VM -Confirm:$false

杰克,您可以向我解释一下'$ AllVMsInCluster | Save-VM -Confirm:$ false'在每个VM中循环,我试图完成任务的第二部分,即'$ AllVMsInCluster | Set-VM -SnapshotFileLocation C:\ ClusterStorage \ Volume1 \',但我不知道如何在最后设置目录,即。'C:\ ClusterStorage \ VOLUME1 \ VM1', 'C:\ ClusterStorage \ VOLUME1 \ VM2'
安东尼Fornito

您需要阅读有关PowerShell的书。基本概念是“管道”,对象从中流过。“ cmdlet”作用在管道上传递给它的每个对象上。如果您想在事情经过时改变行为,则可能需要这样的构造:$ AllVMsInCluster | Foreach对象{Set-VM -SnapshotFileLocation C:\ ClusterStorage \ Volume1 \ $ _。Name}
Jake Oshins
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.