Как я могу получить срабатывание сигнализации с помощью 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
.