@"
===============================================================================
Title: Report-Snaphots.ps1
Description: List snapshots on all VMWARE ESX/ESXi servers as well as VM's
managed by Virtual Center.
Requirements: Windows Powershell and the VI Toolkit
Usage: .\Report-Snaphots.ps1
===============================================================================
"@
#Global Functions
#This function generates a nice HTML output that uses CSS for style formatting.
function Generate-Report {
Write-Output "<html><head><title></title><style type=""text/css"">.Error {color:#FF0000;font-weight: bold;}.Title {background: #0077D4;color: #FFFFFF;text-align:center;font-weight: bold;}.Normal {}</style></head><body><table><tr class=""Title""><td colspan=""6"">VMware Snaphot Report</td></tr><tr><td>VM Name </td><td>Snapshot Name </td><td>Date Created </td><td>Size(MB) </td><td>Description </td><td>Host </td></tr>"
Foreach ($snapshot in $report){
Write-Output "<td>$($snapshot.vm)</td><td>$($snapshot.name)</td><td>$($snapshot.created)</td><td>$($snapshot.sizemb)</td><td>$($snapshot.description)</td><td>$($snapshot.host)</td></tr> "
}
Write-Output "</table></body></html>"
}
#Login details for standalone ESXi servers
$username = 'changeme'
$password = 'supersecret' #Change to the root password you set for you ESXi server
#Folder to store report
$Folder = "C:\Reports"
#List of servers including Virtual Center Server. The account this script will run as will need at least Read-Only access to Cirtual Center
$ServerList = "vc1.example.net"#, "vc2.example.net", "vc3.example.net" #Chance to DNS Names/IP addresses of your ESXi servers or Virtual Center Server
#Initialise Array
$Report = @()
#Get snapshots from all servers
foreach ($server in $serverlist){
# Check is server is a Virtual Center Server and connect with current user
if ($server -eq "VCServer"){Connect-VIServer $server}
# Use specific login details for the rest of servers in $serverlist
else {Connect-VIServer $server -user $username -password $password}
get-vm | get-snapshot | %{
$Snap = {} | Select VM,Name,Created,SizeMB,Description,Host
$Snap.VM = $_.vm.name
$Snap.Name = $_.name
$Snap.Created = $_.created
$Snap.SizeMB = $_.sizemb
$Snap.Description = $_.description
$Snap.Host = $_.vm.host.name
$Report += $Snap
}
}
# Disconnect from Virtual Center
Disconnect-VIServer -Confirm:$False
# Generate the report and email it as a HTML body of an email
Generate-Report > "$Folder\Report-Snapshots.html"
IF ($Report -ne ""){
$SmtpClient = New-Object system.net.mail.smtpClient
$SmtpClient.host = "my.smtp.host" #Change to a SMTP server in your environment
$MailMessage = New-Object system.net.mail.mailmessage
$MailMessage.from = "System.Automation@example.com" #Change to email address you want emails to be coming from
$MailMessage.To.add("yomomma@example.com") #Change to email address you would like to receive emails.
$MailMessage.IsBodyHtml = 1
$MailMessage.Subject = "VMware Snapshots Report"
$MailMessage.Body = Generate-Report
$SmtpClient.Send($MailMessage)}
Script: Report-Snapshots.ps1
·324 words·2 mins·
loading
·
loading
·
·
Scripts
PowerCLI
Snapshots
Storage
Related
Script: Report-Datastores.ps1
·314 words·2 mins·
loading
·
loading
Scripts
Tools
PowerCLI
Storage
Datastore Size Reporting via PowerCLI Script
·384 words·2 mins·
loading
·
loading
Scripts
Tools
PowerCLI
Rescan All HBA's from PowerCLI
·37 words·1 min·
loading
·
loading
Scripts
PowerCLI
VSphere