Como usar o powershell para administrar o Hyper-v Cluser

12

Eu tenho 2 hosts, ambos com o Server 2016 Datacenter

Em cada host, tenho atualmente 2 VMs Dev usando armazenamento compartilhado

Eu posso fazer todas as coisas de cluster, por exemplo, migração ao vivo, movimentação de armazenamento,

Eu tenho procurado em todo o google por um script para poder salvar todas as VMs no cluster ao mesmo tempo.

Se eu executar isso:

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

Ele salvará os VMs, no entanto, solicitará duas vezes os nomes das VMs uma vez para cada host.

Meu objetivo geral é conseguir reconfigurar todas as VMs no cluster a partir de um PC, e também as vm se movimentam muito para que nem sempre estejam no mesmo host.

Exemplo:

Salve todos os vm's

Mover para fora do armazenamento compartilhado:

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 as VMs

Se eu fizer logon em cada host individualmente, o comando será executado bem, no entanto, na minha produção, tenho 7 hosts com cerca de 100 VMs.

Anthony Fornito
fonte

Respostas:

8

Se você deseja endereçar todo o cluster do PowerShell, a melhor solução é provavelmente o módulo PowerShell no System Center Virtual Machine Manager. Foi construído para isso.

O módulo PowerShell que você está usando foi projetado para scripts de host único. Ainda pode ser feito para funcionar. Você pode reestruturar seu código acima. Como um exemplo:

$clusterNodeNames = (Get-ClusterNode -Cluster ClusterName).Name
$AllVMsInCluster = Get-VM -ComputerName $clusterNodeNames
$AllVMsInCluster | Save-VM -Confirm:$false
Jake Oshins
fonte
Jake, você pode me explicar como o '$ AllVMsInCluster | Save-VM -Confirm: $ false 'está circulando por cada VM, estou tentando concluir a segunda parte da minha tarefa, o' $ AllVMsInCluster | Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ ', mas não consigo descobrir como definir o diretório no final, ou seja. 'C: \ ClusterStorage \ Volume1 \ VM1', 'C: \ ClusterStorage \ Volume1 \ VM2'
Anthony Fornito
Você precisa ler um livro no PowerShell. O conceito fundamental é o "pipeline" e os objetos fluem através dele. Um "cmdlet" atua em cada um dos objetos que passam para ele no pipeline. Se você deseja variar o comportamento à medida que as coisas passam, provavelmente deseja uma construção como: $ AllVMsInCluster | Objeto Foreach {Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ $ _. Name}
Jake Oshins 8/17