Quantcast
Channel: VMware Communities: Message List
Viewing all articles
Browse latest Browse all 219257

Re: snapshot reminder notification advice

$
0
0

I don't get any errors.  I'm posting my script that I'm using.  I've even dumbed it down to not go through the foreach look.  When I look at the members $SnapshotInfo = Get-SnapshotExtra $snap[0] it doesn't contain the creator property "aka NoteProperty". I don't confess to be a newbie at powershell although I'm not sure why the property isn't being set.  I've been trying to debug with PowerGUI (which crashes), Am I missing something obvious?

 

function LoadSnapin{
  param($PSSnapinName)
  if (!(Get-PSSnapin | where {$_.Name   -eq $PSSnapinName})){
    Add-pssnapin -name $PSSnapinName
  }
}
LoadSnapin -PSSnapinName   "VMware.VimAutomation.Core"

$smtpServer = "mail.example.com"
$MailFrom = "steve@example.com"
$VISRV = "vCenter1"

function Find-User ($username){
if ($username -ne $null)
{
  $usr = (($username.split("\"))[1])
  $root = [ADSI]""
  $filter = ("(&(objectCategory=user)(samAccountName=$Usr))")
  $ds = new-object system.DirectoryServices.DirectorySearcher($root,$filter)
  $ds.PageSize = 1000
  $ds.FindOne()
}
}

function Get-SnapshotTree{
param($tree, $target)

$found = $null
foreach($elem in $tree){
  if($elem.Snapshot.Value -eq $target.Value){
   $found = $elem
   continue
  }
}
if($found -eq $null -and $elem.ChildSnapshotList -ne $null){
  $found = Get-SnapshotTree $elem.ChildSnapshotList $target
}

return $found
}

function Get-SnapshotExtra ($snap){
$guestName = $snap.VM # The name of the guest
$tasknumber = 999  # Windowsize of the Task collector

$taskMgr = Get-View TaskManager

# Create hash table. Each entry is a create snapshot task
$report = @{}

$filter = New-Object VMware.Vim.TaskFilterSpec
$filter.Time = New-Object VMware.Vim.TaskFilterSpecByTime
$filter.Time.beginTime = (($snap.Created).AddSeconds(-5))
$filter.Time.timeType = "startedTime"

$collectionImpl = Get-View ($taskMgr.CreateCollectorForTasks($filter))

$dummy = $collectionImpl.RewindCollector
$collection = $collectionImpl.ReadNextTasks($tasknumber)
while($collection -ne $null){
  $collection | where {$_.DescriptionId -eq "VirtualMachine.createSnapshot" -and $_.State -eq "success" -and $_.EntityName -eq $guestName} | %{
   $row = New-Object PsObject
   $row | Add-Member -MemberType NoteProperty -Name User -Value $_.Reason.UserName
   $vm = Get-View $_.Entity
   $snapshot = Get-SnapshotTree $vm.Snapshot.RootSnapshotList $_.Result
            $key = $_.EntityName + “&” + ($snapshot.CreateTime.ToString())
   $report[$key] = $row
  }
  $collection = $collectionImpl.ReadNextTasks($tasknumber)
}
$collectionImpl.DestroyCollector()

# Get the guest's snapshots and add the user
$snapshotsExtra = $snap | % {
  $key = $_.vm.Name + "&" + ($_.Created.ToString())
  if($report.ContainsKey($key)){
   $_ | Add-Member -MemberType NoteProperty -Name Creator -Value $report[$key].User
  }
  $_
}
$snapshotsExtra
}

Function SnapMail ($Mailto, $snapshot)
{
$msg = new-object Net.Mail.MailMessage
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$msg.From = $MailFrom
$msg.To.Add($Mailto)
$msg.CC.Add($MailFrom)
$msg.Subject = "Snapshot Reminder" + $Mailto

$MailText = @"
This is a reminder that you have a snapshot active on $($snapshot.VM) which was taken on $($snapshot.Created) GMT/UTC.

Name: $($snapshot.Name)

Description: $($snapshot.Description)
"@

$msg.Body = $MailText
$smtp.Send($msg)
}

$cred = Get-Credential "domain\user"
Connect-VIServer -server $VISRV -credential $cred

#foreach ($snap in (Get-VM | Get-Snapshot | Where {$_.Created -lt ((Get-Date).AddDays(-1))})){
$snap = Get-VM | Get-Snapshot | Where {$_.Created -lt ((Get-Date).AddDays(-1))}
$SnapshotInfo = Get-SnapshotExtra $snap[0]
$mailto = ((Find-User $SnapshotInfo.Creator).Properties.mail)
SnapMail $mailto $SnapshotInfo
#}


Viewing all articles
Browse latest Browse all 219257

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>