There are several types of expressions available when setting up alarms.
It looks as if you want to use the MetricAlarmExpression in this case.
The trick with metric alarms, is that the counter id can be different in each vSphere environment.
Param (
# Define vCenter you are connecting to (ie. vcentername.domain.com)
[string]$vCenterName =$(read-host "Define vCenter instance you are connecting to (ie. vcentername.domain.com)"),
# The DataCenter which you will be connecting to (Name of DataCenter)
[string]$vDataCenterName =$(read-host "Define the DataCenter which you will connecting to (Name of DataCenter)")
)
$toAddr = "email@email.com"
Connect-VIServer -Server $vCenterName
$alarmMgr = Get-View AlarmManager
$rootFolder = Get-Folder -Name 'vm' -Location (Get-DataCenter -Name $vDataCenterName)
$entity = Get-Folder -Name 'Production' -Location ($rootFolder) | Get-View
# AlarmSpec
$alarm = New-Object VMware.Vim.AlarmSpec
$alarm.Name = "VM CPU Usage"
$alarm.Description = "VM CPU Usage"
$alarm.Enabled = $false
#Action
$alarm.action = New-Object VMware.Vim.GroupAlarmAction
$trigger = New-Object VMware.Vim.AlarmTriggeringAction
$trigger.action = New-Object VMware.Vim.SendEmailAction
$trigger.action.ToList = $toAddr
$trigger.action.Subject = "VM CPU Usage Alert"
$trigger.Action.CcList = ""
$trigger.Action.Body = ""
$trigger.Yellow2red = $true
# Transaction
$trans = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$trans.startstate = "yellow"
$trans.finalstate = "red"
$trans.repeats = $false
$trigger.transitionspecs += $trans
$alarm.action.action += $trigger
# Expression
$expression = New-Object VMware.Vim.MetricAlarmExpression
$expression.Operator = "isAbove"
$expression.type = "VirtualMachine"
$expression.metric = New-Object VMware.Vim.PerfMetricId
$expression.metric.counterId = 2
$expression.metric.instance = ""
$expression.yellow = 7500
$expression.yellowInterval = 300
$expression.red = 9000
$expression.redInterval = 300
$alarm.expression = New-Object VMware.Vim.OrAlarmExpression
$alarm.expression.expression += $expression
#Set alarm from once every 24 Hours
$alarm.setting = New-Object VMware.Vim.AlarmSetting
$alarm.setting.reportingFrequency = 86400
$alarm.setting.toleranceRange = 0
# Create alarm.
$alarmMgr.CreateAlarm($entity.MoRef,$alarm)