List VM Snapshots email

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

LVL 1
Colchester_InstituteAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

papalalaCommented:
instead of line 33 ($vms = Get-VM) use following:

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

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Colchester_InstituteAuthor Commented:
yep that seems to work....Is there a way i can put more than one exclusion?
papalalaCommented:
Just use pipe to add more exclusions.

 Get-VM | where {$_.Name -notmatch "excl1"} | where {$_.Name -notmatch "excl2"} | where...
Colchester_InstituteAuthor Commented:
yep thats worked i should have guessed that second part really! Many thanks
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Powershell

From novice to tech pro — start learning today.