param([int]$YellowTresh = "30", [int]$RedTresh = "50") # Get root folder object $entity = (Get-Folder -NoRecursion |Get-View) # Get disk.maxTotalLatency.latest object id $maxtotallatencyid = ((Get-View (Get-View ServiceINstance).Content.PerfManager).PerfCounter|?{$_.groupinfo.key -match "disk"}|?{$_.nameinfo.key -match "maxTotalLatency"}|?{$_.RollupType -match "latest"}).key # get Alarm Manager object $alarmMgr = Get-View AlarmManager if (($alarmMgr.GetAlarm($entity.moref)|?{(get-view $_).info.name -match "Host Max Lun Latency"}|Measure-Object).count -eq 0){ # AlarmSpec $alarm = New-Object VMware.Vim.AlarmSpec $alarm.Name = "Host Max Lun Latency" $alarm.Description = "disk.maxTotalLatency.latest counter alarm" $alarm.Enabled = $TRUE # Action - Send SNMP Trap $alarm.action = New-Object VMware.Vim.GroupAlarmAction $trigger = New-Object VMware.Vim.AlarmTriggeringAction $trigger.action = New-Object VMware.Vim.SendSNMPAction # Transition a - yellow > red $transa = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec $transa.StartState = "green" $transa.FinalState = "yellow" # Transition b - red > yellow $transb = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec $transb.StartState = "yellow" $transb.FinalState = "red" $trigger.TransitionSpecs += $transa $trigger.TransitionSpecs += $transb $alarm.action.action += $trigger # Expression $expression = New-Object VMware.Vim.MetricAlarmExpression $expression.Metric = New-Object VMware.Vim.PerfMetricId $expression.Metric.CounterId = $maxtotallatencyid $expression.Metric.Instance = "" $expression.Operator = "isAbove" $expression.Red = $RedTresh $expression.Yellow = $YellowTresh $expression.Type = "HostSystem" $alarm.expression = New-Object VMware.Vim.OrAlarmExpression $alarm.expression.expression += $expression $alarm.setting = New-Object VMware.Vim.AlarmSetting $alarm.setting.reportingFrequency = 0 $alarm.setting.toleranceRange = 0 # Create alarm. $alarmMgr.CreateAlarm(($entity).MoRef, $alarm) if (($alarmMgr.GetAlarm($entity.moref)|?{(get-view $_).info.name -match "Host Max Lun Latency"}|Measure-Object).count -eq 0){Write-Host -ForegroundColor green "done!"} } else {Write-Host -ForegroundColor red "alarm name already exists"}