Offene VMware Snapshots per E-Mail verschicken

Snapshots sind super. Wenn man aber vergisst diese zu löschen, werden sie ggf. zu einem Problem. Dieses Skript listet alle Snapshots von eingeschalteten VMs und schickt sie als Tabelle an einen E-Mail Empfänger:

# Hier kann eine Ausnahmeliste definiert werden.
# Z.B. können hier die Golden Images von VMware Horizon, etc. rein.
# Also alles was eingeschaltet sein darf und trotzdem Snapshots haben darf
$Ausnahmeliste = @()
# $Ausnahmeliste += "VMName"

$Weiss = "bgcolor='#FFFFFF'"
$Hell = "bgcolor='#F2F5A9'" # HellGelb
$Dunkel = "bgcolor='#F4FA58'" # DunkelGelb
$FarbenCounter = 0

# vCenter/ESX und Credentials definieren
$vCenterName = "vCenter01"
$vCenterIP = "192.168.0.100"
$Benutzer = "administrator@vsphere.local"
$Passwort = "P@ssw0rd"

# E-Mail Server, Absender und Empfänger wird definiert
$MailHost = "192.168.0.200"
$MailFrom = "$vCenterName@contoso.de"
$MailSubject = "Offene Snapshots auf $vCenterName"
$MailTo = "helpdesk@contoso.de"
#######################################

# ----------------------------------------------------------------------
# VMware Module laden
Get-Module -ListAvailable VMware* | Import-Module

# Verbindung zum vCenter/ESX wird initialisiert
Connect-VIServer -Server $vCenterIP -User $Benutzer -Password $Passwort

# Abfrage nach Snapshot mit folgenden Kriterien
# VM ist nicht ausgeschaltet
$VMs = Get-VM | ? {$_.PowerState -ne "PoweredOff"} 

$html = @()

if($VMs){

	$VMs = $VMs | Sort VMName
	
	foreach($VM in $VMs){
	
		$VMName = $VM.Name

		if(!($Ausnahmeliste -like $VMName)){
			
			$Snapshots = Get-Snapshot -VM $VMName

			foreach($Snapshot in $Snapshots){
						
				if(($FarbenCounter % 2) -eq 0){
					$bgcolor = $Dunkel #Dunkle Farbe
				}else{
					$bgcolor = $Hell # Helle Farbe
				}
					
				$Name = $Snapshot.Name
				$Description = $Snapshot.Description
				$Created = ($Snapshot.Created).ToString("dd.MM.yyyy - HH:mm:ss")
				$SizeGB = [System.Math]::Round($Snapshot.SizeGB, 2)

				$html += "<tr $Weiss><td>VM</td><td>$VMName</td></tr>"
				$html += "<tr $bgcolor><td>Name</td><td>$Name</td></tr>"
				$html += "<tr $bgcolor><td>Beschreibung</td><td>$Description</td></tr>"
				$html += "<tr $bgcolor><td>Erstellt am</td><td>$Created</td></tr>"
				$html += "<tr $bgcolor><td>Gr&ouml;&szlig;e</td><td>$SizeGB GB</td></tr>"
				$html += "<tr><td></td></tr>"
								
				$FarbenCounter++
			}
		}
	}
	
	if($html){
		$output = "<table border='1'>"		
		$output += $html
		$output += "</table>"
		
		$MailBody = @()
		$MailBody += "Folgende eingeschaltete VMs haben offene Snapshots:<br>"
		$MailBody += $output
		$MailBody = $MailBody | Out-String
		Send-MailMessage -SmtpServer $MailHost -To $MailTo -From $MailFrom -Subject $MailSubject -Body $MailBody -BodyAsHtml -Encoding UTF8
	}
}