PowerShell | PowerCLI Snapshots

When managing server patching, we always add a snapshot to the server before

patching at let it stay there for about 3-4 days before removal to assure that we

don’t need to roll back. These are the scripts I use for creation, review, and removal.

Scripts assume you are already connected to your vCenter server. 

Get list of computers and check for snapshots by VM name

$Computers=Get-VM | Select -ExpandProperty Name
Foreach($Comp in $Computers){Get-VM $Comp | Get-Snapshot | select VM, Name, Created, SizeGB,description | Export-CSV C:\temp\All-Snaps-Review.csv -NoTypeInformation -Append
}


        
Create snapshot on multiple servers with 10 second interval, sources from file.

 

$VMs=Get-Content C:\temp\Snaps\Snapper.txt

#Loop Through Updated List and Create Snaps before Patch Window
Foreach($VM in $VMs){
   Get-VM $VM | New-Snapshot -name "Pre-Patch Snap" -Description "Script Created-Prior to Patching" -RunAsync -ErrorAction Stop  
   Sleep 10
}

 

 

Import list of computers, delete specific snapshot by name with 30 second interval

Suggest only having like 6 or less systems in source file as to not stress storage system.

SQL and File servers seem to take the longest, just an FYI.

 

$Computers = Get-Content C:\temp\Snaps\One.txt
Foreach($Comp in $Computers){
    Get-Snapshot -VM $Comp | Where{$_.Name -eq 'Pre-Patch Snap'} | Remove-Snapshot -RunAsync -Confirm:$False 
    sleep 30
}