Pular para o conteúdo principal

PowerShell PowerCLI para VMware

O PowerCLI é o módulo oficial da Broadcom (VMware) para gerenciar infraestrutura vSphere, ESXi, vCenter e produtos relacionados via PowerShell.

Instalação

Install-Module -Name VMware.PowerCLI -Scope CurrentUser -Force

Verificar a versão instalada:

Get-Module -Name VMware.PowerCLI -ListAvailable | Select-Object Name, Version

Configuração inicial

Desabilitar o aviso de participação no programa de experiência (CEIP) para uso silencioso:

Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $false -Confirm:$false

Aceitar certificados autoassinados em ambientes de lab:

Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false

Conectar ao vCenter ou ESXi

Connect-VIServer -Server "vcenter.exemplo.local" -User "administrator@vsphere.local" -Password "Senha123"

Para desconectar ao final:

Disconnect-VIServer -Confirm:$false

Listar VMs

Todas as VMs do ambiente:

Get-VM

Filtrar por nome:

Get-VM -Name "web-*"

Exibir estado e host de cada VM:

Get-VM | Select-Object Name, PowerState, VMHost

Ligar e desligar VMs

# Ligar
Start-VM -VM "web-01"

# Desligar via sistema operacional (graceful)
Stop-VMGuest -VM "web-01" -Confirm:$false

# Desligar forçado (equivale a cortar energia)
Stop-VM -VM "web-01" -Confirm:$false

Reiniciar VM

Restart-VMGuest -VM "web-01" -Confirm:$false

Ver recursos de uma VM

Get-VM -Name "web-01" | Select-Object Name, NumCpu, MemoryGB, ProvisionedSpaceGB

Criar um snapshot

New-Snapshot -VM "web-01" -Name "pre-atualizacao" -Description "Antes de atualizar o sistema" -Memory:$false -Quiesce:$false

Listar snapshots:

Get-Snapshot -VM "web-01"

Reverter para um snapshot:

Set-VM -VM "web-01" -Snapshot (Get-Snapshot -VM "web-01" -Name "pre-atualizacao") -Confirm:$false

Remover snapshot:

Remove-Snapshot -Snapshot (Get-Snapshot -VM "web-01" -Name "pre-atualizacao") -Confirm:$false

Listar hosts ESXi

Get-VMHost | Select-Object Name, ConnectionState, PowerState, NumCpu, MemoryTotalGB

Ver uso de recursos dos hosts

Get-VMHost | Select-Object Name,
@{N="CPU Usada (GHz)"; E={[math]::Round($_.CpuUsageMhz / 1000, 2)}},
@{N="Mem Usada (GB)"; E={[math]::Round($_.MemoryUsageGB, 1)}},
@{N="Mem Total (GB)"; E={[math]::Round($_.MemoryTotalGB, 1)}}

Listar datastores

Get-Datastore | Select-Object Name,
@{N="Livre (GB)"; E={[math]::Round($_.FreeSpaceGB, 1)}},
@{N="Total (GB)"; E={[math]::Round($_.CapacityGB, 1)}}

Mover VM entre datastores (Storage vMotion)

Move-VM -VM "web-01" -Datastore "datastore-ssd" -Confirm:$false

Mover VM entre hosts (vMotion)

Move-VM -VM "web-01" -Destination (Get-VMHost "esxi-02.exemplo.local") -Confirm:$false

Exportar lista de VMs para CSV

Get-VM | Select-Object Name, PowerState, NumCpu, MemoryGB, VMHost |
Export-Csv -Path ".\vms.csv" -NoTypeInformation -Encoding UTF8

Script completo: relatório de VMs desligadas

Connect-VIServer -Server "vcenter.exemplo.local" -User "administrator@vsphere.local" -Password "Senha123"

$vmsDesligadas = Get-VM | Where-Object { $_.PowerState -eq "PoweredOff" }

$vmsDesligadas | Select-Object Name,
@{N="Host"; E={ $_.VMHost }},
@{N="CPU"; E={ $_.NumCpu }},
@{N="Mem (GB)"; E={ $_.MemoryGB }} |
Format-Table -AutoSize

Disconnect-VIServer -Confirm:$false