Solved

List VM Snapshots email

Posted on 2012-03-26
4
658 Views
Last Modified: 2012-03-26
Ive got the below script, which compiles an email of all our VMs that have snapshots and sends that out to a selected user.

The script works well but id like to exclude selected VMs by using a wildcard and part of their name and wonder how i can do that?

 
#############################################################################
# List all VM with snapshots
# Run as scheduled task with a user with rights to view all VMs
# 									

Add-PSSnapin VMware.VimAutomation.Core

# HTML/CSS style for the output file
$head = "<style>"
$head = $head + "BODY{background-color:white;}"
$head = $head + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$head = $head + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:thistle}"
$head = $head + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:PaleGoldenrod}"
$head = $head + "</style>"

# SMTP info
$smtpServer = "smtp.domain.com" 
$strFrom = "VMSnapshots@domain.com"
$strTo = "VM-Admins@domain.com"
$strSubject = “Snapshot list - ” + (get-date -DisplayHint date)
$strBody = "Attached is the list of Snapshots"
$strMail = "<H2><u>" + $strSubject + "</u></H2>"

# List your vCenter servers in quotes separated by commas
$Servers="vCenterServer1","vCenterServer2"
foreach ($Server in $Servers){
	Connect-VIServer $Server
	$date=Get-Date -uFormat "%Y%m%d%H%M%S"
	$strOutFile = "C:\Scripting\Output\snapshot_list$date.htm"
	$strSubject = “Snapshot list $Server - ” + (get-date -DisplayHint date)

	# Get the list of VM's
	$vms = Get-VM

	$myCol = @()
	ForEach ($vm in $vms){
	$snapshots = Get-SnapShot -VM $vm
	if ($snapshots.Name.Length -ige 1 -or $snapshots.length){
		ForEach ($snapshot in $snapshots){
			$myObj = "" | Select-Object VM, Snapshot, Created, Description
			$myObj.VM = $vm.name
			$myObj.Snapshot = $snapshot.name
			$myObj.Created = $snapshot.created
			$myObj.Description = $snapshot.description
			$myCol += $myObj
		}
	}
}

	# Write the output to an HTML file
	if ($myCol -ne $null){
 		$myCol | Sort-Object VM | ConvertTo-HTML -Head $head -Body $strMail | Out-File $strOutFile

	# Mail the output file
	$msg = new-object Net.Mail.MailMessage
	$att = new-object Net.Mail.Attachment($strOutFile)
	$smtp = new-object Net.Mail.SmtpClient($smtpServer)
	$msg.From = $strFrom
	$msg.To.Add($strTo)
	$msg.Subject = $strSubject
	$msg.IsBodyHtml = 1
	$msg.Body = Get-Content $strOutFile
	$msg.Attachments.Add($att)
	$msg.Headers.Add("message-id", "<3BD50098E401463AA228377848493927-1>")	# Adding a Bell Icon for Outlook users

	$smtp.Send($msg)}
	DisConnect-VIServer -Server * -Force -Confirm:$false
}

Open in new window

0
Comment
Question by:Colchester_Institute
  • 2
  • 2
4 Comments
 
LVL 2

Accepted Solution

by:
papalala earned 500 total points
ID: 37766394
instead of line 33 ($vms = Get-VM) use following:

$vms = Get-VM | where {$_.Name -notmatch "your_exclude"}
0
 
LVL 1

Author Comment

by:Colchester_Institute
ID: 37766544
yep that seems to work....Is there a way i can put more than one exclusion?
0
 
LVL 2

Assisted Solution

by:papalala
papalala earned 500 total points
ID: 37766583
Just use pipe to add more exclusions.

 Get-VM | where {$_.Name -notmatch "excl1"} | where {$_.Name -notmatch "excl2"} | where...
0
 
LVL 1

Author Comment

by:Colchester_Institute
ID: 37766657
yep thats worked i should have guessed that second part really! Many thanks
0

Featured Post

U.S. Department of Agriculture and Acronis Access

With the new era of mobile computing, smartphones and tablets, wireless communications and cloud services, the USDA sought to take advantage of a mobilized workforce and the blurring lines between personal and corporate computing resources.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Giving access to ESXi shell console is always an issue for IT departments to other Teams, or Projects. We need to find a way so that teams can use ESXTOP for their POCs, or tests without giving them the access to ESXi host shell console with a root …
A quick Powershell script I wrote to find old program installations and check versions of a specific file across the network.
Teach the user how to convert virtaul disk file formats and how to rename virtual machine files on datastores. Open vSphere Web Client: Review VM disk settings: Migrate VM to new datastore with a thick provisioned (lazy zeroed) disk format: Rename a…
Teach the user how to configure vSphere clusters to support the VMware FT feature Open vSphere Web Client: Verify vSphere HA is enabled: Verify netowrking for vMotion and FT Logging is in place or create it: Turn On FT for a virtual machine: Verify …

685 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question