Monitoring mit PowerShell

Einer dieser Typen, "External EXE Check", erlaubt die Übergabe von PowerShell-Befehlen:


Folgende Syntax wird für das Feld "Executable / Arguments" erwartet:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe –ExecutionPolicy ByPass -command "& {POWERSHELL-CODE}"
Das folgende Beispiel gibt die Anzahl der Fehler im Application-Eventlog innerhalb der letzten Stunde zurück:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe –ExecutionPolicy ByPass -command "& {$EventCount=0; $DateAfter = (Get-Date).AddHours(-1); Get-EventLog -LogName "Application" -EntryType "Error" -After $DateAfter | foreach {$_;$EventCount++} | Out-Null; $EventCount;}"
Das folgende Beispiel gibt "Fehler" zurück, wenn ein Exchange-Zertifikat innerhalb der nächsten 31 Tage ausläuft, andernfalls "OK":
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe –ExecutionPolicy ByPass -command "& {Add-pssnapin -Name Microsoft.Exchange.Management.PowerShell.E2010 -ErrorAction SilentlyContinue; $DaysToExpiration = '31'; $expirationDate = (Get-Date).AddDays($DaysToExpiration);[array]$exchCerts = Get-ExchangeCertificate | Where {($_.Services -match 'IIS') -and ($_.NotAfter -lt $expirationDate)}; if ($exchCerts.Count -gt 0) {Write-Host 'Fehler'}else{Write-Host 'OK'}}"
Das folgende Beispiel gibt die Anzahl der Tage zurück, die seit dem letzten Auftreten eines definierten Ereignisses im Windows-Eventlog vergangen sind. Nach Anpassung des "where-object"-Teils kann so beispielsweise ein Monitor erstellt werden, der auf die letzte erfolgreiche Sicherung einer beliebigen Backup-Lösung prüft, die ins Eventlog schreibt:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe –ExecutionPolicy ByPass -command "& {$ErrorActionPreference = 'SilentlyContinue';$deCulture = [Globalization.cultureinfo]::GetCultureInfo('de-DE');$lastSuccessfulBackup = get-eventlog application | where-object {(($_.EventId -eq 12345) -or ($_.EventId -eq 23456)) -and ($_.Message -notmatch 'AusschlussString1') -and ($_.Message -notmatch 'AusschlussString2')} | select -first 1;$TimeSpan = $(Get-Date) - [DateTime]$($lastSuccessfulBackup.timewritten);write-output $($timespan.TotalDays)}"