Snapshot notification Powercli

HI All,

Over the week i have prepared useful PowerCLi script that will help you to inform your End-users, IT teammates about existing snapshots on vCenter.

In my environment, the vCenter filled with some custom attributes like (VM Onwer) and using this attributes i am sending them emails everyday with he following details:


Assuming you have same fields you can use this for you as well.


Formal email:



Powershell Scripts:

Connect-VIServer "YourvCenter"

$Header = @"
BODY{font-family: Arial; font-size: 12pt;}"
TABLE {border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse;}
TH {border-width: 1px; padding: 3px; border-style: solid; border-color: black; background-color: #6495ED;}
TD {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}

$Date = Get-Date
$AllVMs = Get-VM -Location "clustername"
$owners = $AllVMs.CustomFields | Where-Object -Property key -EQ "VM Owner" | select -Unique

foreach($owner in $owners)
$vms = $allvms | where {$_.CustomFields.value -eq $owner.value}
$Result=foreach($vm in $vms)

    $VMOwner = ($VM.CustomFields | Where-Object -Property key -EQ "VM Owner").Value.Replace('', '')
    $VMSnapshots = $VM | Get-Snapshot
     $e= $VMOwner+""
    foreach ($Snapshot in $VMSnapshots)
            "VM Name:"                     = $VM.Name
            "VM Owner:"                    = $VMOwner
            "Snapshot Name:"              = $Snapshot.Name
            "Snapshot Description:"       = $Snapshot.Description
            "Total Snapshots in this VM:" = ($VMSnapshots |  Measure-Object).Count
            "Date Creation:"              = $Snapshot.created
            "Snapshot age (Days):"         = [System.Math]::Round( ($Date - $Snapshot.Created).TotalDays / 1)
            "Snapshot SizeGB"            = [System.Math]::Round($Snapshot.SizeGB, 1)
            "Total Snapshots SizeGB:"     = [System.Math]::Round( ($VMSnapshots | Measure-Object -Sum SizeGB).Sum, 1)


$Email = $Result| ConvertTo-Html -Head $Header 
$e= ($VM.CustomFields | Where-Object -Property key -EQ "VM Owner").value

  if($result -eq "" -or $result -eq $null)
write host "no snap on $vm"
Send-MailMessage -Subject "Your VM's have snapshot!" -Body " <h1 style=color:black;font-size:20px;>Dear, $VMOwner</h1><span  style=color:black;font-size:16px;> We notice that the following VM includes snapshots, <br />
this means that snapshots are utilized storage capacity and degraded the server performance.<br /> Please login to the vCenter and delete unnecessary snapshots, otherwise, you can send us email at [email protected] and we'll do it for you. <br /> <br />  - If snapshot is required, send us email to exclude this vm from alert.<br /><br /> Thank you very much.<br /><br /></p> </span ></style> $Email " -BodyAsHtml -SmtpServer "EmailServer" -From [email protected] -to  $e