Simplifying VMware Virtual Machine Snapshots with PowerShell

Managing virtual machine snapshots is crucial for ensuring that you can revert to previous states if needed, especially before making significant changes. This PowerShell script automates the process of creating and listing snapshots for VMware virtual machines. By using this script, administrators can efficiently manage snapshots without the complexity of the graphical interface.
This script will:
1. Connect to a VMware server.
2. List all virtual machines and their current snapshots.
3. Create a snapshot for a specified virtual machine.
With this automation, IT professionals can enhance control over their virtual environments and improve backup processes.

# Load VMware PowerCLI module
if (-Not (Get-Module -ListAvailable -Name VMware.PowerCLI)) {
    Install-Module -Name VMware.PowerCLI -Scope CurrentUser -AllowClobber
}
# Connect to the VMware server
$vcServer = "your-vcenter-server"
$credential = Get-Credential
Connect-VIServer -Server $vcServer -Credential $credential
# List all VMs and their snapshots
$vms = Get-VM
Write-Host "=== Current Snapshots for Virtual Machines ==="
foreach ($vm in $vms) {
    Write-Host "VM Name: $($vm.Name) - Power State: $($vm.PowerState)"
    $snapshots = Get-Snapshot -VM $vm -ErrorAction SilentlyContinue
    if ($snapshots) {
        foreach ($snapshot in $snapshots) {
            Write-Host "   Snapshot Name: $($snapshot.Name) - Created: $($snapshot.Created)"
        }
    } else {
        Write-Host "   No snapshots available."
    }
}
# Create a new snapshot
$vmNameToBackup = Read-Host "Enter the name of the VM to create a snapshot for"
$snapshotName = Read-Host "Enter a name for the new snapshot"
New-Snapshot -VM $vmNameToBackup -Name $snapshotName -Description "Snapshot created by PowerShell script on $(Get-Date)"
Write-Host "Snapshot $snapshotName created for VM $vmNameToBackup."
# Disconnect from the VMware server
Disconnect-VIServer -Server $vcServer -Confirm:$false
Write-Host "Snapshot management actions completed."