Einbinden von PowerShell-Skripten in Foglight Custom Agenten und das Auslesen von Werten aus einer XML-Datei

Eine nützliche Eigenschaft von Foglight ist es, die vorhandenen Monitoring-Funktionalitäten um eigene Skriptagenten zu erweitern. Leider lassen sich PowerShell-Skripte nicht direkt als Skriptagenten aus Foglight aufrufen, da sie nicht im notwendigen Kontext ausgeführt werden. Im Folgenden wird beschrieben, wie diese Restriktion durch die Verwendung einer Windows Batch Datei umgangen werden kann. Als Beispiel dient ein Skript mit der Aufgabe, Informationen zum Startverhalten von Windows komfortabel aus einer XML-Datei zu lesen, um diese in Foglight für Statistik- und Alarmierungszwecken zu verwenden.

Eine Voraussetzung um PowerShell-Skripte zu verwenden ist, deren Ausführung zu erlauben. Dies kann über die PowerShell-Kommandozeile erfolgen. Der Befehl "Set-ExecutionPolicy unrestricted" erlaubt die uneingeschränkte Ausführung. Alternativ bestehen folgende Optionen:

  • Restricted – Es können keine Skripte ausgeführt werden. Windows PowerShell kann nur im interaktiven Modus genutzt werden.
  • AllSigned – Nur von einem vertrauenswürdigen Autor erstellte Skripte können ausgeführt werden.
  • RemoteSigned – Heruntergeladene Skripte müssen von einem vertrauenswürdigen Autor signiert werden, bevor sie ausgeführt werden können.
  • Unrestricted – Alle Windows PowerShell-Skripte können ausgeführt werden.

 

 

Sollten die 32Bit und die 64Bit Version von PowerShell zur gleichen Zeit installiert sein, empfiehlt es sich, das Kommando in beiden Umgebungen auszuführen.

Nun zum eigentlichen Skript. Ziel ist es, die Startwerte verschiedener Prozesse und Services eines Windows Systems aus einer XML-Datei zu lesen, die vom Betriebssystem generiert wurde. Ein nützliches Tool, um die Struktur von XML-Dateien und die Pfade zu den Werten zu ermitteln, ist das XML Notepad von Microsoft.

Das Skript Bootcheck.ps1

Param(
[string]$verzeichnis
)

#Pfad und Name der XML Datei
[xml]$test = Get-Content "$verzeichnis"

#Uebergabe der Werte an die Variablen res1 – res7
$res1 = $test.results.boot.timing.bootDoneViaPostBoot
$res2 = $test.results.boot.timing.bootDoneViaExplorer
$res3 = $test.results.boot.timing.interval[2].winlogon.notification[0].startTime
$res4 = $test.results.boot.timing.interval[2].winlogon.notification[0].endTime

$out = $test.results.boot.processSummary.unexpectedShortlived.process | where-object {$_.name -eq "CMIGuiServer.exe"}| %{$_.lifetime -replace ' ', ''}

if (!$out) {$res5 = "0"}
else {$res5 = $out.TrimStart("lifetime")}

$out =  $test.results.boot.services.serviceTransition | where-object {$_.name -eq "McAfeeFramework"}| findstr "totalTransitionTimeDelta" | %{$_ -replace ' ', ''} | %{$_ -replace ':',''}

if (!$out) {$res6 = "0"}
else {$res6 = $out.TrimStart("totalTransitionTimeDelta")}

$out =  $test.results.boot.services.serviceTransition | where-object {$_.name -eq "LANDesk Targeted Multicast"}| findstr "totalTransitionTimeDelta" | %{$_ -replace ' ', ''} | %{$_ -replace ':',''}

if (!$out) {$res7 = "0"}
else {$res7 = $out.TrimStart("totalTransitionTimeDelta")}

#Werte an Foglight uebergeben
echo "TABLE BootInfo"
echo "START_SAMPLE_PERIOD"
echo "bootDoneViaPostBoot:millisecond = $res1"
echo "bootDoneViaExplorer:millisecond = $res2"
echo "CreateSessionStartTime:millisecond = $res3"
echo "CreateSessionEndTime:millisecond = $res4"
echo "CMIGuiLifeTime:millisecond = $res5"
echo "McAfeeTTTDelta:millisecond = $res6"
echo "LanDeskTTTDelta:millisecond = $res7"
echo "END_SAMPLE_PERIOD"
echo "END_TABLE"

Um dieses Skript in Foglight verwenden zu können, muss der Aufruf über eine Batch-Datei abgesetzt werden.

Die Batch-Datei Checkboot.bat

@echo off
if not "%ECHO%"=="" echo %ECHO%
if not "%OS%"=="Windows_NT" goto EXIT
if "%sample_freq%"=="" set sample_freq=60

powershell.exe .\bootcheck.ps1 -verzeichnis "C:\Kunden\neu\boot_1.xml" < NUL

Die XML-Datei boot_1.xml befindet sich in diesem Beispiel im Verzeichnis C:\Kunden\neu, das Powershell-Skript im selben Verzeichnis wie die Batch-Datei.

Das Einbinden in Foglight erfolgt wie gewohnt über „Administration/Tooling/Script Agent Builder“.

Im Anschluss können Regeln und Dashboards zur Alarmierung und Visualisierung der Werte erstellt werden. Um das Deployment und die Portabilität des Skripagenten zu erleichtern, können alle Komponenten zu einer Cartridge-Datei mit dem Cartridge Builder zusammengefasst werden. Das Vorgehen wird im Blogeintrag „Wie mache ich Foglight Custom Skriptagenten portabel? Komfortables erzeugen von Cartridge-Dateien“ beschrieben.

Weitere Informationen gibt es auch in unserer Foglight Community.

Anonymous