Script: Report-Snapshots.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | @" =============================================================================== 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)} |
Download here: http://vsential.com/wp-content/uploads/2011/05/Report-Snapshots.ps1_.txt





