Как я могу получить срабатывание сигнализации с помощью PowerCLI?

В vSphere Client на хосте VM на вкладке Alarms есть представление Triggered Alarms.

Как я могу получить эти тревоги, используя PowerCLI?

3 ответа

Это то, что я использую.

$esx = Get-VMHost $vmhost | Get-View
foreach($triggered in $esx.TriggeredAlarmState){
  $alarmDef = Get-View -Id $triggered.Alarm
  Write-Host $alarmDef.Info.Name
}

Чтобы найти всех vmhosts со статусом тревоги = "красный", я подробно остановился на этом.

#
# Find all hosts with triggered alarms in "Red" state
#
$esx_all = Get-VMHost | Get-View
$Report=@()
foreach ($esx in $esx_all){
    foreach($triggered in $esx.TriggeredAlarmState){
        If ($triggered.OverallStatus -like "red" ){
            $lineitem={} | Select Name, AlarmInfo
            $alarmDef = Get-View -Id $triggered.Alarm
            $lineitem.Name = $esx.Name
            $lineitem.AlarmInfo = $alarmDef.Info.Name
            $Report+=$lineitem
        } 
    }
}
$Report |Sort Name | export-csv "c:\temp\ESX-Host-Red-Alarms.csv" -notypeinformation -useculture
Invoke-item "c:\temp\ESX-Host-Red-Alarms.csv"

Чтобы немного расширить johnshen64 на PowerCLI , я нашел Люка Декенса на сайте groups.vmware.com очень полезным: ответ сообщение

      foreach($dc in (Get-Datacenter | where {$_.ExtensionData.triggeredAlarmState})){
    $dc.ExtensionData.triggeredAlarmState |
    Select @{N="Entity";E={Get-View $_.Entity | Select -ExpandProperty Name}},
        @{N="Alarm";E={Get-View $_.Alarm | Select -ExpandProperty Info | Select -ExpandProperty Name}},Time,OverallStatus,
        @{N='vCenter';E={$dc.Uid.Split('@:')[1]}}
}

... и в итоге я использовал вариант этого:

      foreach ($toplevel in    @(Get-VDSwitch    | Where-Object { $_.ExtensionData.TriggeredAlarmState.count -gt 0 }) +
                         @(Get-Datacenter  | Where-Object { $_.ExtensionData.TriggeredAlarmState.count -gt 0 })) {
    foreach ($alarm in $toplevel.ExtensionData.TriggeredAlarmState) {
        $localt = [System.TimeZoneInfo]::ConvertTime($alarm.time, [System.TimeZoneInfo]::Local)
        $entity = Get-View $alarm.Entity
        $alarmview = Get-View $alarm.Alarm
        Write-Output ("Alarm: At top-level entity $($toplevel.Name), $($entity.Name) went " +
                        "$($alarm.OverallStatus) at $($localt) for $($alarmview.Info.Name)")
    }
}

Идея состоит в том, чтобы пройти через каждый объект верхнего уровня, к которому могут быть переданы сигналы тревоги. Методом проб и ошибок я обнаружил, чтоGet-VDSwitchиGet-Datacenterнакрыл то, что мне было нужно. Другая сложность заключается в том, чтобы понять, что объекты Entity и Alarm внутри сигнала тревоги являются ссылками на реальные объекты, поэтому, чтобы получить подробную информацию о реальном элементе, вам необходимо разыменовать его с помощьюGet-View.

Другие вопросы по тегам