Powershell y VMWare: Mola bastante

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
 }
}
Dejar un comentario?

0 Comentarios.

Deje un comentario


NOTA - Puede usar estosHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.