Riasztások megjelenítése PowerShell widget segítségével

Az Operations Manager 2012 R2 ben bevezetésre került egy új képesség, amivel egy PowerShell script kimenetét tudjuk megjeleníteni egy Dashboard kijelzon. Gondolom, nem kell fejtegetnem, hogy ez mennyire kiszélesíti a lehetoségek tárházát, hiszen amit nem lehet megoldani PowerShell segítségével az gyakorlatilag nem is létezik...

Errol van egy rövidke kis leírás a Techneten (https://social.technet.microsoft.com/wiki/contents/articles/24595.operations-manager-dashboard-script-widgets.aspx#PowerShell_Grid_Widget) érdemes átolvasni, illetve a példát megnézni gyakorlatban.

A cikkben lévo példa arra mutat lehetoséget, hogy hogyan tudunk megjeleníteni SCOM objektumokat egy PowerShell widgetben. Viszont arra nem, hogy hogyan tudunk Alerteket kilistázni. A gond abból származik, hogy a ScriptContext objektum CreatefromObject metódusa egy Operations Manager osztály egy példányát képes megjeleníteni ebben a vezérloben és az Alert-ek nem ilyen objektumok.

Ehhez a ScriptContext objektum CreateInstance metódusa fog kelleni, ezzel képesek vagyunk saját tartalom megjelenítésére a widgeten belül, nézzünk erre egy egyszeru példát:

$alerts = Get-ScomAlert | ? {$_.resolutionstate -eq 0}

 foreach($alert in $alerts){

    $dataObject = $ScriptContext.CreateInstance("xsd://one!dummy/string")

    $dataObject["Id"] = [string]($alert.ID)

    $dataObject["Name"] = [string]($alert.Name)

    $ScriptContext.ReturnCollection.Add($dataObject)

    }

 

A példa meg fogja jeleníteni azokat az Alert-eket melyek 0-s resolution state-tel rendelkeznek. Itt egy dologra szeretném felhívni a figyelmet, hogy a vezérlo használatakor mindig szükség van egy Id mezore, ami egyedileg azonosítja az adott sort a widgeten belül. Esetünkben az Id oszlop az alert egyedi azonosítóját használja erre a célra, mely nem is jelenik meg a nézetben.

Ez viszont erosen hiányos, mivel csak az Alert-ek nevét jeleníti meg, semmilyen más adat nem látszik a vezérlon. Ezt viszonylag könnyen tudjuk bovíteni a $dataObject[””] sor ismétlésével:

$dataObject["TimeRaised"] = [string]($alert.TimeRaised)

 

Már csak egy feladatunk akadt, az pedig Severity információ megjelenítése. Ehhez a ScriptContext objektum CreateWellKnownType metódusa fog a segítségünkre szolgálni. Ezzel tudunk speciális objektumokat létrehozni a vezérlon belül (https://social.technet.microsoft.com/wiki/contents/articles/21625.scriptcontextobject.aspx#CreateWellKnownType)

Az alábbi script részlet kiegészíti a fenti példát pár plusz információval (az ikonnal is, mely a riasztás szintjét jelzi)

 

$alerts = Get-ScomAlert | ? {$_.resolutionstate -eq 0}

 

foreach($alert in $alerts){

   

    $dataObject = $ScriptContext.CreateInstance("xsd://one!dummy/string")

    $dataObject["Id"] = [string]($alert.ID)

    $dataObject["Severity"] = $ScriptContext.CreateWellKnownType('xsd://Microsoft.SystemCenter.Visualization.Library!Microsoft.SystemCenter.Visualization.OperationalDataTypes/SeverityType',($alert.severity))

    $dataObject["Name"] = [string]($alert.Name)

    $dataObject["State"] = [string]($alert.ResolutionState)

    $dataObject["TimeRaised"] = [string]($alert.TimeRaised)

    $ScriptContext.ReturnCollection.Add($dataObject)

     }

 

 

Érdemes kihasználni ezt az új képességet, hiszen a Widget segítségével, gyakorlatilag bármilyen adatot össze tudunk gyujteni és meg tudunk jeleníteni az Operations Console-n. A késobbiekben még erre fogok példákat hozni.