Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [Array]$vCenters = @("172.168.1.50","192.168.0.50")
- [String]$vCenterUsername="sudershan.bharti@gmail.com"
- [String]$vCenterPassword="Passw0rd"
- [String]$smtpServer="smtp.gmail.com"
- [String]$OutputCsv="C:\Temp\vCenterAlarms.csv" #Where you want to place generated report
- [String]$OutputFile="C:\Temp\vCenterAlarms.html" #Where you want to place generated report
- $i = 0
- Function Set-AlternatingRows {
- [CmdletBinding()]
- Param(
- [Parameter(Mandatory=$True,ValueFromPipeline=$True)]
- [object[]]$HTMLDocument,
- [Parameter(Mandatory=$True)]
- [string]$CSSEvenClass,
- [Parameter(Mandatory=$True)]
- [string]$CSSOddClass
- )
- Begin {
- $ClassName = $CSSEvenClass
- }
- Process {
- [string]$Line = $HTMLDocument
- $Line = $Line.Replace("<tr>","<tr class=""$ClassName"">")
- If ($ClassName -eq $CSSEvenClass)
- { $ClassName = $CSSOddClass
- }
- Else
- { $ClassName = $CSSEvenClass
- }
- $Line = $Line.Replace("<table>","<table width=""50%"">")
- Return $Line
- }
- }
- $Header = @"
- <style>
- TABLE {border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}
- TH {border-width: 1px;padding: 3px;border-style: solid;border-color: black;background-color: #6495ED;}
- TD {border-width: 1px;padding: 3px;border-style: solid;border-color: black;white-space: nowrap;}
- .odd { background-color:#ffffff }
- .even { background-color:#dddddd }
- </style>
- <title>
- vCenter Alarms
- </title>
- "@
- Function Get-TriggeredAlarms {
- Write-Host "Connecting to vCenter $_" -foregroundcolor "magenta"
- $vc = Connect-VIServer $vCenter -User $vCenterUsername -Password $vCenterPassword
- $rootFolder = Get-Folder -Server $vc "Datacenters"
- foreach ($ta in $rootFolder.ExtensionData.TriggeredAlarmState) {
- $alarm = "" | Select-Object VC, EntityType, Alarm, Entity, Status, Time, Acknowledged, AckBy, AckTime
- $alarm.VC = $vCenter
- $alarm.Alarm = (Get-View -Server $vc $ta.Alarm).Info.Name
- $entity = Get-View -Server $vc $ta.Entity
- $alarm.Entity = (Get-View -Server $vc $ta.Entity).Name
- $alarm.EntityType = (Get-View -Server $vc $ta.Entity).GetType().Name
- if($ta.OverallStatus -eq "yellow"){
- $Alertcode = "Orange"
- }
- elseif($ta.OverallStatus -eq "red"){
- $Alertcode = "red"
- }
- else{
- $Alertcode = "black"
- }
- $alarm.Status = "<p style=color:" + $Alertcode + "; >" + $ta.OverallStatus + "</p>"
- $alarm.Time = $ta.Time
- $alarm.Acknowledged = $ta.Acknowledged
- $alarm.AckBy = $ta.AcknowledgedByUser
- $alarm.AckTime = $ta.AcknowledgedTime
- $alarm
- $i++
- Write-Progress -Activity "Looking up Alarms" -Status "Current alarm: $i in $vCenter" -PercentComplete ($i/$rootFolder.ExtensionData.TriggeredAlarmState.count*100)
- }
- Disconnect-VIServer $vCenter -Confirm:$false
- }
- Write-Host ("Getting the alarms from {0} vCenters." -f $vCenters.Length)
- $alarms = @()
- foreach ($vCenter in $vCenters) {
- Write-Host "Getting alarms from $vCenter."
- $alarms += Get-TriggeredAlarms $vCenter
- }
- #$alarms = $alarms | Where {$_.EntityType -ne "VirtualMachine"} | sort-object -Property VC
- $alarms = $alarms | sort-object -Property VC
- $alarms | Export-Csv -Path $OutputCsv -NoTypeInformation
- $alarms = $alarms | ConvertTo-Html -Head $Header | Set-AlternatingRows -CSSEvenClass even -CSSOddClass odd | foreach {$_.replace("<","<").replace(">",">")} | Out-File $OutputFile
- $emailBody = Get-Content $OutputFile
- Send-MailMessage -From "vCenterAlarms@Gmail.com" -To "sudershan.bharti@gmail.com" -Subject "vCenter Hardware Alarm Report" -Body ($emailBody | Out-String) -BodyAsHtml -Priority High -Attachments $OutputCsv -SmtpServer $smtpServer
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement