Cómo usar powershell para administrar el Clúster Hyper-v

12

Tengo 2 hosts con Server 2016 Datacenter

En cada host tengo 2 máquinas virtuales actualmente Dev usando almacenamiento compartido

Puedo hacer todas las cosas del clúster, es decir, migrar en vivo, mover el almacenamiento,

He estado buscando en todo Google un script para poder guardar todos los vm en el clúster al mismo tiempo.

Si ejecuto esto:

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

Sin embargo, guardará los vm. Me solicitará dos veces los nombres de las VM una vez para cada host.

Mi objetivo principal es poder reconfigurar todas las máquinas virtuales en el clúster desde una PC, también los vm se mueven mucho para que no siempre estén en el mismo host.

Ejemplo:

Guardar todos los vm

Mueva el apagado del almacenamiento compartido:

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

Inicie las máquinas virtuales

Si inicio sesión en cada host individualmente, el comando se ejecutará bien, sin embargo, en mi producción tengo 7 hosts con aproximadamente 100 máquinas virtuales.

Anthony Fornito
fuente

Respuestas:

8

Si desea abordar el clúster completo desde PowerShell, la mejor solución es probablemente el módulo PowerShell en System Center Virtual Machine Manager. Fue construido para esto.

El módulo de PowerShell que está utilizando fue diseñado para secuencias de comandos de host único. Todavía se puede hacer que funcione. Puede reestructurar su código arriba. Como ejemplo:

$clusterNodeNames = (Get-ClusterNode -Cluster ClusterName).Name
$AllVMsInCluster = Get-VM -ComputerName $clusterNodeNames
$AllVMsInCluster | Save-VM -Confirm:$false
Jake Oshins
fuente
Jake, ¿puedes explicarme cómo funciona el '$ AllVMsInCluster | Save-VM -Confirm: $ false 'está recorriendo cada VM, estoy tratando de hacer la segunda parte de mi tarea, el' $ AllVMsInCluster | Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ 'pero no puedo entender cómo configurar el directorio al final, es decir. 'C: \ ClusterStorage \ Volume1 \ VM1', 'C: \ ClusterStorage \ Volume1 \ VM2'
Anthony Fornito
Necesita leer un libro sobre PowerShell. El concepto fundamental es la "tubería", y los objetos fluyen a través de ella. Un "cmdlet" actúa sobre cada uno de los objetos que le pasan por la tubería. Si desea variar el comportamiento a medida que pasan las cosas, probablemente desee una construcción como: $ AllVMsInCluster | Foreach-Object {Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ $ _. Name}
Jake Oshins