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