Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

List VM Snapshots email

Posted on 2012-03-26
4
Medium Priority
?
675 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 2000 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 2000 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

[Webinar] Cloud and Mobile-First Strategy

Maybe you’ve fully adopted the cloud since the beginning. Or maybe you started with on-prem resources but are pursuing a “cloud and mobile first” strategy. Getting to that end state has its challenges. Discover how to build out a 100% cloud and mobile IT strategy in this webinar.

Question has a verified solution.

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

My attempt to use PowerShell and other great resources found online to simplify the deployment of Office 365 ProPlus client components to any workstation that needs it, regardless of existing Office components that may be needing attention.
August and September have been big months for VMware—from VMworld last month to our new Course of the Month in VMware Professional - Data Center Virtualization. We reached out to Andrew Hancock, resident VMware vExpert, to have a more in-depth discu…
This tutorial will walk an individual through the steps necessary to enable the VMware\Hyper-V licensed feature of Backup Exec 2012. In addition, how to add a VMware server and configure a backup job. The first step is to acquire the necessary licen…
How to Install VMware Tools in Red Hat Enterprise Linux 6.4 (RHEL 6.4) Step-by-Step Tutorial

916 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