Ein installierter Backup-Agent heißt noch lange nicht, dass gesichert wird. Wie Sie mit Discovery und Skriptmonitor erkennen, ob sich in den letzten Tagen tatsächlich etwas getan hat.
Die Ausgangslage aus einem Community-Beitrag: Eine Discovery findet alle Server, auf denen ein bestimmter Backup-Dienst installiert ist. Das reicht aber nicht – ein installierter Dienst bedeutet nicht, dass auch tatsächlich gesichert wird. Als zuverlässiges Indiz stellte sich heraus: Läuft das Backup, ändern sich Unterordner im Backup-Verzeichnis. Zusätzliche Hürde: Der Pfad ist nicht auf jedem Server gleich.
Discovery oder Monitor?
Der erste Gedanke war, den Zustand „gut/schlecht“ als Attribut per Discovery zu ermitteln. Davon raten wir ab: Discoveries sollen stabile Eigenschaften erfassen (Version, Installationspfad, Rolle). Häufig wechselnde Werte führen zu sogenanntem Config Churn – ständigen Konfigurationsänderungen, die Datenbank und Management Server belasten.
Die saubere Aufteilung lautet:
- Discovery: Liest den Programmpfad bzw. Backup-Pfad aus der Registry und speichert ihn als Eigenschaft der Klasse „Backup-Client“.
- Monitor: Ein Skript prüft regelmäßig, ob sich im Pfad in den letzten X Tagen etwas geändert hat, und setzt den Integritätsstatus.
Schritt 1: Registry-Discovery
Eine einfache Registry-Discovery (z. B. per VSAE mit dem Modul Microsoft.Windows.FilteredRegistryDiscoveryProvider) legt für jeden Server mit dem Backup-Dienst eine Instanz an und übernimmt den Pfad aus einem Registry-Wert als Eigenschaft BackupPath. Da der Pfad unterschiedlich ist, ist das genau der richtige Ort dafür.
Schritt 2: Skriptmonitor
Der Monitor erhält den Pfad als Parameter ($Target/Property[Type="..."]/BackupPath$) und gibt den Zustand per Property Bag zurück:
param([string]$BackupPath, [int]$MaxAgeDays = 10)
$api = New-Object -ComObject 'MOM.ScriptAPI'
$bag = $api.CreatePropertyBag()
$limit = (Get-Date).AddDays(-$MaxAgeDays)
$latest = Get-ChildItem -LiteralPath $BackupPath -Directory -Recurse -ErrorAction SilentlyContinue |
Sort-Object LastWriteTime -Descending | Select-Object -First 1
if ($latest -and $latest.LastWriteTime -gt $limit) {
$bag.AddValue('State', 'GOOD')
} else {
$bag.AddValue('State', 'BAD')
}
$bag.AddValue('LastChange', [string]$latest.LastWriteTime)
$bag
Im Monitor wird Property[@Name='State'] auf GOOD bzw. BAD ausgewertet; LastChange kann im Alarmtext erscheinen, damit der Operator sofort sieht, seit wann nichts mehr passiert ist.
Tipp
Prüfen Sie, ob Ihre Backup-Software ein eigenes Ereignisprotokoll oder einen Status per WMI/PowerShell bereitstellt. Ein direktes Erfolgs-Ereignis („Sicherung abgeschlossen“) ist meist aussagekräftiger als Dateizeitstempel – die Ordnerprüfung ist die robuste Rückfallebene.
Heute
Die ursprüngliche Lösung von 2011 war ein VBScript mit Log-Datei. Das Prinzip – stabile Daten in die Discovery, wechselnde Zustände in den Monitor – ist zeitlos und gilt für jede SCOM-Version.