VMware: Actualizar templates de Windows en Vmware con PowerCLI

Como hemos visto en posts anteriores la manera típica de crear nuevas máquinas virtuales es a través de templates, nosotros como administradores necesitamos tener los templates actualizados, tener uno o dos templates no supone un reto ni mucho consumo de tiempo, pero si se tienen varios templates en diferentes locaciones como por ejemplo: 3 templates en Mexicali, 3 en Tijuana, 3 en Ensenada y otros 3 en alguna otra parte (Solo por decir algunos), esta tarea puede resultar un poco tardada ya que el procedimiento conlleva algunos pasos.

Este es un ejemplo de lo que usualmente debemos de hacer:

  • 1.- Volver a convertir el template en una máquina virtual.
  • 2.- Iniciar la máqunia virtual.
  • 3.- Iniciar sesión como administrador, ir a panel de control buscar las actualizaciones recientes, aceptarlas, aplicarlas y reiniciar el equipo.
  • 4.- Cuando los pasos de arriba estén completados entonces debemos volver a convertir esa máquina virtual en un template e iniciar nuevamente con el resto de templates.

En este post veremos como realizar lo antes mencionado a todos los templates con PowerShell sin tener que realizar nada manualmente.

Automation is the way!

Para esto debemos de tener en cuenta de que los templates deben de contar con lo siguiente:

VMware Tools instalado.
PowerShell Version 4 o superior.
Modulo de PSWindowsUpdate en PowerShell.

Como mencioné, el modulo de PsWindowsUpdate es escencial para que este script funcione, para instalarlo es muy sencillo, solamente debemos correr PowerShell como administrador y ejecutar la siguiente línea.

Install-Module PSWindowsUpdate

Este es el script que puedes usar para realizar estas tareas.

Connect-VIServer -Server 'YOUR VCENTER HERE'
$Templates = Get-Template | ForEach-Object {$_.Name}
foreach ($Template in $Templates) {
    $Template
    $Template
    #Convert the Template to a VM
    Set-Template -Template $Template -ToVM -Confirm:$False -RunAsync
    Start-Sleep -Seconds 30
    #Poweron the VM
    Start-VM -VM $Template 
    Start-Sleep -Seconds 60
    #Get Credentials
    $User = 'Administrator'    
    $Password = ConvertTo-SecureString (Get-Content -Path 'YOURPASSWORD PATH HERE\Template_Credentials.txt') -AsPlainText -Force
    $Credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user, $Password    
    Invoke-VMScript -ScriptType PowerShell -ScriptText "Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot" -VM $Template -GuestCredential $Credentials | Out-File -FilePath c:\temp\Windows_Updates.log -Append 
    Start-Sleep -Seconds 1800    
    Update-Tools -VM $Template -NoReboot 
    Restart-VMGuest -VM $Template -Confirm:$false
    Shutdown-VMGuest –VM $Template -Confirm:$false 
    Start-sleep -s 120
    Set-VM –VM $Template -ToTemplate -Confirm:$false
}
Disconnect-VIServer -Server '
 VCENTER HERE

' -Confirm:$false

En la siguiente imagen describiré que es lo que hace este script.

Bueno, ya sabemos que primero debemos realizar una conexión a nuestro Vcenter así que no lo he marcado en la imagen.
Empecemos.
1.- En este punto guardo todos los nombres de los templates en la variable $Templates
2.- Realizar un foreach para recorrer los templates y aplicar las actualizaciones a cada uno de ellos.
3.- Convertir el template en una máquina virtual, aquí hago una pausa para que termine el proceso del lado de Vmware.
4.- Iniciar la máquina virtual, nuevamente hago una pausa para esperar a que inicie Windows.
5.- En este punto estoy creando las credenciales que usaré para conectarme a la máquina y poder ejecutar el código remotamente, en mi caso estoy almacenando el password en un archivo .TXT para que éste no sea visible en el código, pero pueden pasar el password directamente solo removiendo todo lo que está entre paréntesis y pasar una variable que contenga el password.
6.- Aquí estoy invocando un script a la máquina virtual del tipo PowerShell donde texto o código que ejecutará serán los parametros “Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot“, además de eso guardaré los logs en mi folder C:\Temp\Windows_Updates.log que podré revisar más tarde cuando finalice todo el proceso, aquí nuevamente hago una pausa de 30 minutos para esperar a que se completen las actualizaciones, esta parte puede variar así que es a su criterio, para finalizar este punto también hago una actualización de VMware Tools.
7.- Aquí pueden reinicio la máquina virtual.
8.- En este punto apago la máquina virtual y la convierto en un template nuevamente.

Nota: como todo este código está dentro de un foreach, hará el mismo procedimiento en todos los templates restantes.

Al finalizar podremos observar un log como el siguiente donde se muestra el nombre de la computadora, el resultado, la actualización, el peso y el título de la actualización que se ha aplicado.

Bien, como último paso solo quedaría crear una tarea programada que se ejecute mensualmente y ya no nos tendríamos que preocupar nunca más por esto.

Leave a Reply

Your email address will not be published. Required fields are marked *