En este artículo incluímos el script para que uséis en vuestros entornos, así como el vídeo explicándolo por si alguno necesita acalaración de cada una de las partes.

Código

# Carlos Melantuche
# https://www.NoSoloHacking,info
# Youtube https://www.youtube.com/c/nosolohacking?sub_confirmation=1


#Variables de tu entorno, especifica la IP/FQDN de tu servidor ESXi/vCenter y las credenciales
$vCenterIP = "IP o nombre Servidor"
$vCenterUser = "Usuario"
$vCenterPassword = "Pon tu password"
$VMList = @("VM1", "VM2", "VM3")
$SnapshotName = "Mispe"

#Función para crear Snapshots 
Function CrearVMSnapshot {
Connect-VIServer $vCenterIP -username $vCenterUser -password $vCenterPassword
    Foreach ($VM in $VMList) {
    Write-Host "Creando Snapshot para la máquina $VM"
    New-Snapshot -VM $VM -Memory -quiesce -Name $SnapshotName -RunAsync
    pause}
                             }
                                                        
#Función para revertir Snapshots             
Function RevertirUltimoVMSnapshot {
Connect-VIServer $vCenterIP -username $vCenterUser -password $vCenterPassword
    Foreach ($VM in $VMList) {
    Write-Host "Revertiendo Snapshot para la máquina $VM"
    $snap = Get-Snapshot -VM $VM | Sort-Object -Property Created -Descending | Select -First 1
    Set-VM -VM $vm -SnapShot $snap -Confirm:$false  -RunAsync | Out-Null
    pause
                             }                           
                                    } 

#Function RevertirVMSnapshotEspecifica {
# Connect to vCenter
#Connect-VIServer $vCenterFQDN -username $vCenterUser -password $vCenterPassword
#    Foreach ($VM in $VMList) {
#    Write-Host "Revertiendo Snapshot para la máquina $VM"
#    $snap = Get-Snapshot -VM $VM | Sort-Object -Property Created -Descending | Select -First 1
#    Set-VM -VM $vm -SnapShot $SnapshotName -Confirm:$false  -RunAsync | Out-Null
#    pause
#                             }                           
#                                    } 

#Consolidando todas las snapshots                                   
Function ConsolidarTodasVMSnapshot {

Connect-VIServer $vCenterIP -username $vCenterUser -password $vCenterPassword
    Foreach ($VM in $VMList) {
    Write-Host "Removing ALL Snapshot for $VM"
    $snap = Get-Snapshot -VM $VM | Sort-Object -Property Created -Descending | Select -First 1
    get-vm -Name $VM | get-snapshot | remove-snapshot -Confirm:$false  | Out-Null
    pause                                }                           
                                    }   
    
    
    Function UnaTecla 
{
    Write-Host -NoNewline -Object 'Press any key to return to the main menu...' -ForegroundColor Yellow
    $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
    Menu
}
                                     
Function Menu 
{
    Clear-Host        
    Do
    {
        Clear-Host                                                                       
        Write-Host -Object 'Elige una opción'
        Write-Host     -Object '**********************'
        Write-Host -Object 'Opcones a elegir' -ForegroundColor Red
        Write-Host     -Object '**********************'
        Write-Host -Object '1.  Tomar Snapshot de VMs '
        Write-Host -Object ''
        Write-Host -Object '2.  Revertir al último Snapshot '
        Write-Host -Object ''
 #       Write-Host -Object '3.  Revert a snapshot especifico'
  #      Write-Host -Object ''
        Write-Host -Object '3.  Borrar todos los Snapshots '
        Write-Host -Object ''
        Write-Host -Object '4.  Exit'
        Write-Host -Object $errout
        $Menu = Read-Host -Prompt '(1-4)'
 
        switch ($Menu) 
        {
           1 
            {
                CrearVMSnapshot            
                UnaTecla
            }
            2 
            {
                RevertirUltimoVMSnapshot
                UnaTecla
            }
            #3 
            #{
            #    RevertirVMSnapshotEspecifica
            #    UnaTecla
            #}
            3 
            {
                BorrarTodasVMSnapshot
                UnaTecla
            }
            4 
            {
                Exit
            }   
            default
            {
                $errout = 'Opción inválida, por facro selecciona de nuevo........Sólo del 0-4 Muñón'
            }
 
        }
    }
    until ($Menu -ne '')
}   
 
# Arrancar el menu
Menu                        
                                   

Vídeo

error: ooops!