Comandos Powershell em Cluster 2012

Quando falamos em virtualização, a melhor forma para gerenciamento é através do System Center. Agora, caso não se use o system center ou você seja um daqueles que gostam de usar powershell para quase tudo seguem alguns comandos para gerenciamento de VMs em cluster com Windows Server 2012 ou Hyper-V 2012. Esses comandos também funcionam nos 2012 R2:

Dentro de um dos hosts podemos usar os seguintes comandos:

Verificar o nome do cluster:
Get-Cluster

Verificar o Cluster Group:
Get-ClusterGroup

Verificar os nós de um cluster:
Get-ClusterNode

Verificar as VMs em todos os nós do Cluster e em qual nó cada VM está:
Get-ClusterResource | where resourcetype -eq “Virtual Machine” | fl ownergroup, ownernode

Outra forma de verificar as VMs de todos os nós de um cluster:
Get-ClusterNode | foreach ($_.name) {get-vm -computername $_.name}
No caso acima não fica espeficificado em qual host a VM está.

Aqui especifica em qual host cada VM está:
Get-ClusterNode | foreach ($_.name)  {get-vm -computername $_.name | ft vmname, computername}
Um detalhe interessante é que os dois scripts acima verificam todas as VMs em hosts físicos de um cluster, porém, pode acontecer de algumas VMs não estarem clusterizadas.

Para verificar todas as VMs de um cluster usamos o seguinte comando:
Get-ClusterNode | foreach ($_.name)  {get-vm -computername $_.name | where IsClustered -eq $true | ft vmname, computername}

Para ver as VMs que estão em hosts do cluster sem estarem clusterizadas rodamos o comando quase igual ao anterior:
Get-ClusterNode | foreach ($_.name)  {get-vm -computername $_.name | where IsClustered -eq $false | ft vmname, computername}

Verificar as configurações de processador de todas as VMs do Cluster:
Get-ClusterNode | foreach ($_.name)  {get-vm -computername $_.name | Get-VMProcessor}

Verificar as VMs de um cluster onde a compatibilidade do processador para migração entre hosts com processadores de diferentes versões não está habilitada:
Get-ClusterNode | foreach ($_.name)  {get-vm -computername $_.name | Get-VMProcessor | where CompatibilityForMigrationEnabled -eq $false}

Se houver uma ideia de alterar essas VMs que não estão com compatibilidade de processador para o status ativo podemos usar o seguinte comando (lembrando que essa feature só pode ser alterada com a VM desligada, então o script irá desligar as VMs e ligar após a alteração)

$a = Get-ClusterNode | foreach ($_.name)  {get-vm -computername $_.name | Get-VMProcessor | where CompatibilityForMigrationEnabled -eq $false} | foreach ($_.vmname) {$_.vmname}
$b = Get-ClusterNode | foreach ($_.name)  {get-vm -computername $_.name | Get-VMProcessor | where CompatibilityForMigrationEnabled -eq $false} | foreach ($_.vmname) {$_.computername}
Write-Host Atualmente as VMs que não tem compatibilidade de processador para Migracoes sao: $a
foreach ($c in $a)
{stop-vm –computername $b -vmname $c}
foreach ($d in $a)
{Get-VM –computername $b -vmname $d | Set-VMProcessor -CompatibilityForMigrationEnabled 1}
foreach ($e in $a)
{start-vm -computername $b -vmname $e}

Para o comando acima, o ideal seria salvar como .ps1. Alguns erros podem aparecer, pois o script não testa se a vm está em um nó especifico. Esses erros não atrapalham o resultado.

Para verificar a versão do Integration Services das VMs dos hosts do cluster:
Get-ClusterNode | foreach ($_.name) {get-vm -computername $_.name | ft name, integrationservicesversion}

Para verificar as VMs que estão com uma isso montada em todos os hosts do cluster:
Get-ClusterNode | foreach ($_.name) {get-vm -computername $_.name | Get-VMDvdDrive | where path -ne $null | select VMName, path} | foreach ($_.vmname) {$_.vmname}

Para remover a iso montada das VMS em um cluster:
Get-ClusterNode | foreach ($_.name) {get-vm -computername $_.name | Get-VMDvdDrive | where path -ne $null | Set-VMDvdDrive -Path $null} | foreach ($_.vmname) {$_.vmname}

Até a próxima!!