Greetings to all vSphere administrators out there! We are now going to take a look at a new functionality introduced in PowerCLI 4.1 Update 1 – namely vSphere alarms management. We assume that you are already familiar with the vSphere alarms functionality. For those of you who are not, here are some resources on the topic: vSphere Datacenter Administration Guide (see Chapter 13 “Working with Alarms”).

Here’s an excerpt from the VMware documentation – “Alarms are notifications that occur in response to selected events, conditions, and states that occur with objects in the inventory. … The vCenter Server system is configured with a set of predefined alarms that monitor clusters, hosts, datacenters, datastores, networks, and virtual machines.” The current PowerCLI 4.1 Update 1 release supports only modifying the predefined alarms that come with the installation of vCenter Server.

The new cmdlets are:

  • Get-AlarmDefinition
  • Set-AlarmDefinition
  • New-AlarmAction
  • Get-AlarmAction
  • Remove-AlarmAction
  • New-AlarmActionTrigger
  • Get-AlarmActionTrigger
  • Remove-AlarmActionTrigger

With the new cmdlets, you can modify: the alarm actions, the interval on which alarm actions repeat (if repeatable), the alarm names, the alarm descriptions, and whether the alarm is enabled or not. We’ll look at some examples of how we can use these alarm management cmdlets.

Get-AlarmDefinition is a typical PowerCLI getter. It returns all the alarms defined on the vCenter Servers you’re connected to. There are also some optional parameters which allow you to filter the results by name, by the inventory object on which the alarm is defined, and by its state (enabled or disabled).

Here are some examples:

Get-AlarmDefinition # This will return all the defined alarms on the servers you’re connected to

Get-AlarmDefinition -Name "virtual machine*" -Enabled $false # This will return all the disabled alarm definitions with names starting with “virtual machine”

Get-VMHost hostname | Get-AlarmDefinition # This will return all alarms that apply to the host “hostname”. This includes alarms defined on this host and alarms inherited from the parent entity, or from any ancestors in the inventory hierarchy.

Here’s how you can modify an alarm definition:

Get-AlarmDefinition "Host memory status" | Set-AlarmDefinition -Name "Host memory" -Enabled $false # This will rename the alarm to “Host memory” and disable it

The main part of the alarm definitions you can manage is an alarm’s actions configuration. You can create an alarm action this way:

Get-AlarmDefinition "Host storage status" | New-AlarmAction -Email -To “” -Subject "Host storage shortage" # This will create a send email action which will be triggered once when the alarm state changes from warning (yellow) to alert (red)

Here is how you can add another action trigger, which will fire earlier – when the alarm state changes from normal (green) to alert (yellow):

$action = Get-AlarmDefinition "Host storage status" | Get-AlarmAction -ActionType SendEmail # Get the action we previously created

$action | New-AlarmActionTrigger -StartStatus Green -EndStatus Yellow –Repeat # Add a new repeating trigger to the action

You can also set the interval at which the action is repeated:

Set-AlarmDefinition "Host storage status" -ActionRepeatMinutes (60 * 24) # This will configure the send email action to repeat once a day (as long as the alarm is in the yellow state)

Finally you may want to remove certain alarm actions. You can do it this way:

$action = Get-AlarmDefinition "Host storage status" | Get-AlarmAction -ActionType SendEmail

Remove-AlarmAction -AlarmAction $action

This is what you can do with the newly introduced cmdlets. The PowerCLI team has decided that the rest of the alarm functionality will not be reconfigured often enough to add cmdlets for the task. However you can always gain full control over the situation through the alarm’s View object. Here’s how you can change alarm configuration that is not available to change through the cmdlets:

# Get the alarm’s view

$alarmDefinition = Get-AlarmDefinition "Host storage status"

$alarmSpecification = $alarmDefinition. ExtensionData

# Make the desired alarm configuration changes

$alarmSpecification. Description="advanced-set description…..”

# Some other changes to the alarm configuration specification (for questions see the vSphere API Reference)

# Update the alarm

$alarmView = Get-View $alarmSpecification.Alarm

$alarmView.ReconfigureAlarm( $alarmSpecification )


Best regards,

-Angel Evrov, MTS at VMware