Häufig bekommt man vorgefertigte Skripte, die in das SCOM-Monitoring eingebunden werden sollen. Ein Two-State-VBScript-Monitor erhält von einer Batch-Datei Statusmeldungen als String über StdOut übergeben.
Vorzugsweise sollte so eine Batch Datei den String „OK“ (Healthy) oder einen String mit Fehlermeldung „Fehler XYZ aufgetreten“ (Unhealthy) zurückgeben. Diese Rückgabe eines String über StdOut wird als Parameter status via PropertyBag des SCOM-Monitors zu einem Healthy/Unhealthy-Status verarbeitet und entsprechend eskaliert.
In diesem Beispiel-Script wird zusätzlich geprüft, ob die externe Datei existiert und im Fehlerfall eine entsprechende Nachricht an die PropertyBag übergeben.
Hier das im SCOM-Monitor eingebundene VBScript mit der PropertyBag:
'SCOM-Monitorscript fuer Aufruf externes String-Script Dim oAPI, oBag, objShell, objExec, fso, line, s Const FileName = "c:\meinebatch.bat“ Set oAPI = CreateObject("MOM.ScriptAPI“) Set fso = CreateObject("Scripting.FileSystemObject“) If (fso.FileExists(FileName)) Then Set objShell = WScript.CreateObject("WScript.Shell“) Set objExec = objShell.Exec(FileName) Do line = objExec.StdOut.ReadLine() s = s & line Loop While Not objExec.Stdout.atEndOfStream Else s = "File “ & FileName & “ does not exist“ End If Set oBag = oAPI.CreatePropertyBag() Call oBag.AddValue("status“,s) Call oAPI.Return(oBag) |
Programmbeschreibung zeilenweise | |
1 | Definition der Variablen |
2 | Definition Stringkonstante für das aufzurufende externe Programm. Es muss der absolute Pfad und Dateiname angegeben werden. |
3 | Zuweisen Objekt MOM.ScriptAPI für die PropertyBag zur Übergabe von Parametern an den SCOM-Monitor. |
4 | Zuweisen FileSystemObject für die Methode FileExists |
5 | Bedingung mit FileExists, wenn auszuführendes externes Programm existiert, dann …bis Zeile 12 folgenden Code ausführen. |
6 | Objektdefinition WScript.Shell |
7 | Auf das Objekt WScript.Shell die Methode Exec mit dem Parameter „externes Programm“ anwenden. |
8 | Loop, fußgesteuerte Schleife bis 11 |
9 | Die aktuelle Zeile von StdOut wird gelesen und der Variable line zugewiesen. |
10 | Die aktuelle Zeile wird ohne(!) Zeilenvorschub der Variable s für den gesamten Output hinzugefügt. |
11 | Ende der fußgesteuerten Schleife wenn EndOfLine in StdOut erreicht ist. |
12 | Wenn externes Programm nicht vorhanden ist … bis Zeile 14 |
13 | Fehlermeldung der Variable s zuweisen |
14 | End If |
15 | Erzeugen einer PropertyBag |
16 | Zuweisen (Add) des Ergebnis von s zum Parameter „status“ in der PropertyBag |
17 | Return zum SCOM mit PropertyBag im „Schlepptau“ |