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