Lista de Scripts VMWare PowerCli

La automatización ha sido una gran parte de la nueva era DevOps. En los últimos 3 años han nacido una cantidad considerable de herramientas para disminuir el tiempo de administración manual dentro de los entorno VMware. Dos herramientas sumamente poderosas para cualquier vCenter son vCenter Orchestrator y PowerCLI.

PowerCLI es una herramienta ya con un buen tiempo en el mercado y su fortaleza radica en la versatilidad de poder controlar grandes granjas de VMWare desde una línea de comandos, para cualquier tarea repetitiva generalmente hay una línea en PowerCli que lo facilita todo.

A continuación, se muestra una lista de scripts prácticos ordenados por categoría, poco a poco iré enriqueciendo más este listado. Si alguno de ustedes desea aportar algo, puede hacerlo escribiendo a soporte-vmware@stackfire.com

Espero que los encuentren útiles 🙂

Virtual Machines

Lista de todos las VM y sus tamaños de disco

ForEach ($VM in Get-VM ){($VM.Extensiondata.Guest.Disk | Select @{N="Name";E={$VM.Name}},DiskPath, @{N="Capacity(MB)";E={[math]::Round($_.Capacity/ 1MB)}}, @{N="Free Space(MB)";E={[math]::Round($_.FreeSpace / 1MB)}}, @{N="Free Space %";E={[math]::Round(((100* ($_.FreeSpace))/ ($_.Capacity)),0)}})}
Calcular el uso promedio de CPU, memoria, red y disco para máquinas virtuales activadas en los últimos 30 días, intervalos de 5 minutos. Puede modificar el intervalo de 'AddDays (-N)' y '-IntervalMins 5' si es necesario.
Get-VM | Where {$_.PowerState -eq "PoweredOn"} | Select Name, Host, NumCpu, MemoryMB, ` @{N="CPU Usage (Average), Mhz" ; E={[Math]::Round((($_ | Get-Stat -Stat cpu.usagemhz.average -Start (Get-Date).AddDays(-30) -IntervalMins 5 | Measure-Object Value -Average).Average),2)}}, ` @{N="Memory Usage (Average), %" ; E={[Math]::Round((($_ | Get-Stat -Stat mem.usage.average -Start (Get-Date).AddDays(-30) -IntervalMins 5 | Measure-Object Value -Average).Average),2)}} , ` @{N="Network Usage (Average), KBps" ; E={[Math]::Round((($_ | Get-Stat -Stat net.usage.average -Start (Get-Date).AddDays(-30) -IntervalMins 5 | Measure-Object Value -Average).Average),2)}} , ` @{N="Disk Usage (Average), KBps" ; E={[Math]::Round((($_ | Get-Stat -Stat disk.usage.average -Start (Get-Date).AddDays(-30) -IntervalMins 5 | Measure-Object Value -Average).Average),2)}} |` Export-Csv -Path d:AverageUsage.csv

Listar todas las VM que tienen montados un ISO vía CD/DVD

Get-VM | Get-CDDrive | select @{N="VM";E="Parent"},IsoPath | where {$_.IsoPath -ne $null}

Desmontar los ISO de las VMs que están montados vía CD/DVD

Get-VM | Get-CDDrive | where {$_.IsoPath -ne $null} | Set-CDDrive -NoMedia -Confirm:$False

Actualizar VMware Tools desde un listado de IP's en un archivo línea por línea 

Get-Content PATH-TO-FILE | ForEach-Object {Update-Tools $_ -NoReboot}

Listar snapshots en todos los ESX

get-vm | get-snapshot | Format-Table -Property VM,Name,Created,Description, SizeMB

Cambiar en caliente el adaptador a VMXNET3 de todas las VMs que lo soporten

$VMGpo = Get-content PATH-TO-FILE
Get-VM $VMGpo | Get-NetworkAdapter | set-networkadapter -type vmxnet3 -confirm:$false

Datastores

Lista del tamaño de partición para cada VM:

ForEach ($VM in Get-VM ){($VM.Extensiondata.Guest.Disk | Select @{N="Name";E={$VM.Name}},DiskPath, @{N="Capacity(MB)";E={[math]::Round($_.Capacity/ 1MB)}}, @{N="Free Space(MB)";E={[math]::Round($_.FreeSpace / 1MB)}}, @{N="Free Space %";E={[math]::Round(((100* ($_.FreeSpace))/ ($_.Capacity)),0)}})}

Networking

Agregar un Port Group a todos los ESX contenidos en un cluster.

Get-Cluster "CLUSTER NAME" | Get-VMHost | Get-VirtualSwitch -Name "vSwitch0" | New-VirtualPortGroup -Name "VM NETWORK NAME" -VLanId VLANID

Establecer el tipo del adaptador de red virtual a una VM

Get-VM "VM NAME" | Get-NetworkAdapter | Set-NetworkAdapter -Type EnhancedVmxne

-