add-pssnapin VMware.VimAutomation.Core
$smtpServer = "smtp.company.com"
$visrv = "vsphere"
$MailFrom = $visrv + "@company.com"
$days = 7
$emailto = "Recipient@company.com"
Connect-VIServer -Server $VISRV -WarningAction SilentlyContinue
Function SnapMail ($Mailto, $Subject, $Body)
{
$msg = new-object Net.Mail.MailMessage
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$msg.From = $MailFrom
$msg.To.Add($Mailto)
$msg.Subject = $Subject
$msg.IsBodyHTML = $true
$msg.Body = $Body
$smtp.Send($msg)
} foreach ($vm in get-vm | sort-object){
$vmsnapdays = $null
$vmsnapif = $null
$vmsnapfs = $null
$vmsnapper = $null
$vmsnapname = $null
$VMConfig = $vm.ExtensionData.Config.ExtraConfig | where {$_.Key -eq "ignore.snaps"}
$IgnoreSnaps = $VMConfig.Value
$vmname = $vm.name
$vmhost = $vm.vmhost
If ($IgnoreSnaps -ne 1){ $snaps = get-snapshot -vm $vm | Where { $_.Created -lt (Get-Date).AddDays(-$days)} foreach ($snap in $snaps){ $snapName = $snap.name
$vmsnapif = $false
$snapsize = $snap.SizeGB if ($snapname -ne $null){
$vmsnapdays = $true $vmdatastore = Get-VM $vm | Get-Datastore | Sort-Object FreeSpaceGB | Select -First 1
$datastorefree = $vmdatastore.FreeSpaceGB
$datastoretotal = $vmdatastore.CapacityGB
$datastorename = $vmdatastore.Name
$datastorefreepercent = $datastorefree / $datastoretotal
if ($datastorefree -gt $snapsize){
$vmsnapfs = $true
if ($datastorefreepercent -gt 0.1){ $vmsnapper = $true remove-snapshot -snapshot $snap -confirm:$false
}else{
$vmsnapper = $false
}
}else{
$vmsnapfs = $false
} } }
}
else {
$vmsnapif = $true
}
$IgnoreSnaps = $null
$vmhostpar = Get-VMHost -Name $vmhost | Select Parent
$vmhostdc = $vmhostpar.parent
$Object = @()
$objValues = @{
VM=$vmname
SnapName=$snapname
OldSnap=$vmsnapdays
SnapsIgnored=$vmsnapif
DataStoreFreeSpace=$vmsnapfs
DataStoreFreePercent=$vmsnapper
VMHost=$vmhost
DataCentre=$vmhostdc
}
$tobj = New-Object PSObject -Property $objValues
$object += $tobj $emailbody = $emailbody + $object }
$style = "<style>BODY{font-family: Arial; font-size: 10pt;}"
$style = $style + "TABLE{border: 1px solid black; border-collapse: collapse;}"
$style = $style + "TH{border: 1px solid black; background: #dddddd; padding: 5px; }"
$style = $style + "TD{border: 1px solid black; padding: 5px; }"
$style = $style + "</style>"
$date = (get-date -f ddMMyyyy)
$emailb = $emailbody | Select-Object VM,DataCentre,SnapName,OldSnap,SnapsIgnored,DataStoreFreeSpace,DataStoreFreePercent,VMHost | ConvertTo-Html -Head $style
$emailsub = "Snapshot Action table for $date"
SnapMail $emailto $emailsub $emailb
↧
Re: Remove Snapshots Older than 7 Days
↧