A raíz del artículo de Brian Graf y de LucD sobre cambios de especificaciones de máquinas virtuales, hemos hecho un pequeño script configure_vmtools_power_cycle.ps1 capaz de marcar en las máquinas virtuales el atributo “tools upgrade”
Se invoca desde powercli
.\configure_vmtools_power_cycle.ps1
Requiere configuración para definir en qué contenedor (Location) va a aplicar el cambio de políticas.
Para evitar que queden vmware tools montadas en los linux, sólo aplica el cambio sobre máquinas definidas como Windows y encendidas.
En la versión de powercli 5.5 que estamos trabajando, sólo está relleno el cambio vm.Guest.OsFullname si la máquina está encendida. En el caso de máquinas apagadas, no podemos discriminar por sistema operativo. Por ello, se ha puesto también la opción en la función de forzar la aplicación.
Function configure_vmtools_power_cycle ( $vm, [bool] $force )
{
# Comment if you want to upgrade non windows vm
if ((($vm.Guest.State -eq "PoweredOn") -and ($vm.Guest.OSFullName.Contains("Windows")) -or ($force)))
{
write-host "Configure vmtools check and upgrade in every powercycle: " $vm.Name $vm.Guest.OSFullName
# This line creates the object that encapsulates the settings for reconfiguring the VM
$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
# This line creates the object we will be modifying
$vmConfigSpec.Tools = New-Object VMware.Vim.ToolsConfigInfo
# This line sets the Tools upgrades policy checkbox
$vmConfigSpec.Tools.ToolsUpgradePolicy = "UpgradeAtPowerCycle"
# This line commits the change to each virtual machine
# Get-View -ViewType VirtualMachine | %{ $_.ReconfigVM($vmConfigSpec)}
# Reconfigure vm
$vm | Get-View | %{ $_.ReconfigVM($vmConfigSpec)}
}
}