Posts Tagged VMware

Monitor VMware for SnapShots

Here is something I recently put together to monitor VMware Snapshots. 

The issue: The backup solution creates snapshots daily but if something goes wrong it doesn’t clean up a snap.

The solution: Using this simple powercli script, we monitor and check to see if any VM’s have snapshots over 1 day old. If so we highlight them in the report, other snapshots are simply in the report.

Side Note: Not sure if I’m happy with the colors I used in the report but it does grab ones attention.

# Author: Robert Stacks
# URL:
# Date: 6/18/2012
# Updated: 7/2/2012
# Version: 0.4
# Purpose:
# Scan and report on Snapshots that are older than 1 day in VCenter

#Add Snapins
Add-PSSnapin VMware.VimAutomation.Core

#Get todays Date
$date = Get-Date

#User Adjustable Variables  #

#Name of your Company for Report Title

#Vcenter Logon Info
$ESXserver = ""
$ESXuser = "vmwareuser"
$ESXpassword = "password"

#Adjust report +/- age of Snap Shots in days
$TimeinDays = 1

#Mail Server Variables
$SMTPserver = ""
$from = ""
$to = ""

#Main Script                #

#Determine if already connected to VCenter and if not connect
if ( $DefaultVIServers.Length -lt 1 )
Connect-VIServer -Server $ESXserver -User $ESXuser -Password $ESXpassword -WarningAction SilentlyContinue | Out-Null

# Format html report
$htmlReport = @"
<style type='text/css'>
.heading {
font-family:Verdana, sans-serif;
.colnames {
font-family:Tahoma, sans-serif;
border:.5pt solid windowtext;
.text {
border:.5pt solid windowtext;
.textlate {
border:.5pt solid windowtext;
<table border=0 cellpadding=.5 cellspacing=0 width=556
<tr style='height:15.0pt'>
<th colspan=6 height=40 width=555>
<center>- $CompanyName - </center></th>
<th colspan=6 height=40 width=555>
<center> vSphere Snapshots Daily Report </center></th>
<th>Size (MB)</th>
<th>VM State</th>
<th>Date Created</th>

$vmlist = Get-VM -Server $ESXserver
$snapshotCount = 0

ForEach ($vm in $vmlist)
# List snaphosts
$snapshots = Get-Snapshot -VM (Get-VM -Name $vm.Name) -WarningAction SilentlyContinue

if ($snapshots -ne $null)

ForEach ($snapshot in $snapshots)
if( $snapshot -ne $null)
$snapshotCount = $snapshotCount + 1

if ($snapshot.created -lt (Get-Date).AddDays(-$TimeinDays))
$htmlReport = $htmlReport +
"<tr><td class='textlate'>" + $snapshot.Name + "</td>" +
"<td class='textlate'>" + "Snapshot Over 24 Hours Old" + "</td>" +
"<td class='textlate'>" + $snapshot.SizeMB + "</td>" +
"<td class='textlate'>"+ $vm.Name + "</td>" +
"<td class='textlate'>" + $vm.PowerState + "</td>" +
"<td class='textlate'>" + $snapshot.Created + "</td></tr>"
$htmlReport = $htmlReport +
"<tr><td class='text'>" + $snapshot.Name + "</td>" +
"<td class='text'>" + "Snapshot Less Than 24 Hours Old" + "</td>" +
"<td class='text'>" + $snapshot.SizeMB + "</td>" +
"<td class='text'>"+ $vm.Name + "</td>" +
"<td class='text'>" + $vm.PowerState + "</td>" +
"<td class='text'>" + $snapshot.Created + "</td></tr>"

$htmlReport = $htmlReport + "</table>"

Disconnect-VIServer -Server $ESXserver -Force:$true -Confirm:$false

# Send email
$subject = "vSphere Snapshots Daily Report: " + $snapshotCount + " snapshots"
$emailbody = "No snapshot was found."
if( $snapshotCount -gt 0 )
$emailbody = $htmlReport
$mailer = New-Object Net.Mail.SMTPclient($SMTPserver)
$msg = New-Object Net.Mail.MailMessage($from, $to, $subject, $emailbody)
$msg.IsBodyHTML = $true

Here is what it will look like in a email.




Citrix XenDesktop 5 using Machine Creation Services (MCS) and Microsoft KMS Services

Hey all, happy new year!   Been working on our XenDesktop deployment over the holidays and ran into a snafu when working with Microsoft Activation keys.  As any of you know when working with Microsoft products you have the option to use a MAK key or a KMS key with a given product.  However their is a limit on how many times you can use a MAK key and in large deployments this may not be the best solution. When deploying virtual desktops the best solution is to setup a Microsoft KMS host and use KMS client keys so that each clone will have a validate Windows License, this also prevents you from using up your MAK keys when you redeploy your clones during updates/patches/etc.

When we started down the path of using Citrix on top of VMware using MCS we didn’t realize at the time there was a catch using KMS keys.  Both Citrix and VMware when you deploy their solutions have options to reset the SID of the cloned machine however when you mix the two and use MCS it becomes a little more of a challenge.  I found a interesting statement of support from Citrix here:

MCS does not support or work with KMS based Microsoft Windows 7 activation by default, however the following workaround has been provided and will be supported by Citrix Support should an issue arise.  So the process to address this while cover in the link in short is to create your image, create a snap shot, run slmgr /rearm from command line on the image, take a 2nd snap shot and label it rearm and then build your Machine Catalog off that.

After doing so, each clone as it boots up for the first time will have a unique sid to register with your KMS key server.

The down side is that anytime you want to update the image you have to perform the above steps all over again before updating the catalog when the updates be they windows updates, virus updates, putting a new icon on the desktop etc.

The whole process is much less of a issue if you have 25 other devices already registered with your KMS host as that is the minimal requirement to active Windows 7 using a KMS host prior to it actually allowing the 1st activation to be successful.  If this is the case then you need not bother with the above as the clones will still activate with the KMS host even if they have the same SID its the first 25 that is a gotcha.

, ,

Leave a comment