Voy a ser sincero: Considerando cuándo lo echaron al mundo, Powershell me parece, como dicen los abogados, manifiestamente mejorable. Pero es el lenguaje de scripting (en español: pequeñas ñapillas rápidas) de vmware, y si se necesita hacer algo programado, sin florituras pero que ande, es lo que hay que usar.
Cansado de vaciar a mano los almacenamientos para instalarles parches, decidí ponerme profilaxis, echar mano de Notepad++, y tras las típicas tribulaciones de los que aprendimos a programar hace muchos años y raramente lo hacemos ya (sustitúyase «programar» por «montar en bicicleta» para un ejemplo gráfico), acabé con lo siguiente, que es una ñapa de lo más funcional.
Que ustedes lo disfruten.
<# .SYNOPSIS Vaciar un almacenamiento .DESCRIPTION Mueve todas las máquinas virtuales del almacenamiento origen al destino .INPUTS None .OUTPUTS Log File Por ahora, no deja ni rastro .NOTES Version: 0.1 Author: alfredo Creation Date: 20160421 Purpose/Change: Version inicial .EXAMPLE $almacenOrigen = "Origen" $almacenDestino = "Destino" #> # Horas de operacion $horaInicio = "1" $horaFin = "6" $almacenOrigen = "Origen" $almacenDestino = "Destino" # Usuario y vCenter $vcServidor = '172.16.0.0' $vcUsuario = 'usuario' $vcClave = 'clave' # Velocidad a la que consideramos que movemos las maquinas en GB/min $velocidad = 1.5 $historico = "C:\Users\alfredo\$(Get-Date -uformat "%Y%m%d-%H%M%S").sucesos" Start-Transcript -Path $historico Connect-VIServer $vcServidor -User $vcUsuario -Password $vcClave $MVs = get-datastore -name $almacenOrigen | get-vm | sort UsedSpaceGB Foreach($MV in $MVs) { # Ver si estamos en hora y si acabariamos en hora do { $h=Get-Date sleep 100 } while ( ($h.Hour -lt $horaInicio) -or ($h.Hour -gt $horaFin) ) $mogollon=[math]::round((get-vm $MV).UsedSpaceGB , 2) $finEstimado=$h.AddMinutes($mogollon/$velocidad) if ( $finEstimado.Hour -lt $horaFin) { Write-Host ([string](Get-Date) + " Empezando a mover '" + $MV.Name + "'") Move-VM -VM (Get-VM -Name $MV) -Datastore $almacenDestino -DiskStorageFormat thin Write-Host ([string](Get-Date) + " Movido '" + $MV.Name + "'") } else { # Estamos fuera de hora, asi que esperamos # Deberiamos calcular mejor cuanto tenemos que esperar, para otra version sleep 1000 } }
0 Comentarios.