Benutzer mit den meisten Antworten
Windows Backup Ereignisanzeige per PowerShell abfragen

Frage
-
Guten Tag,
wenn ein Windows Backup erfolgreich durchgelaufen ist, wird im Microsoft-Windows-Backup Log das Ereignis 4 abgespeichert.
Ich suche nun einen Weg, per PowerShell eine Abfrage zu erstellen, ob in den letzten 24 Stunden die Event ID 4 im Eventlog protokolliert wurde. Es soll einfach nur ein ja oder nein bzw. 0 oder 1 beim Ergebnis der Abfrage raus kommen, damit das Monitoring es auswerten kann. Der Befehl sollte am besten ein One-Liner sein.
Ich bin bisher nur so weit gekommen, mir alle ID 4 Events anzeigen zu lassen, schaffe es aber nicht, nur die letzten 24 Stunden anzeigen zu lassen, geschweige denn mir nur ein true/false bzw. 0/1 ausgeben zu lassen:
Get-WinEvent -LogName Microsoft-Windows-Backup -ComputerName Server2.domain.local | Where-Object {$_.Id -eq 4}
Vielen Dank für eure Hilfe!
Antworten
-
Ja so funktionierts, besten Dank!
$value=(Get-WinEvent -ComputerName Server2.domain.local -FilterHashtable @{LogName='Microsoft-Windows-Backup'; ID=4; Starttime=$((Get-Date).AddHours(-36))} -ErrorAction SilentlyContinue) if ($value -ne $null) {echo 1} else {echo 0}
- Als Antwort markiert -harry Dienstag, 1. Dezember 2020 16:01
Alle Antworten
-
Moin,
schau Dir den Parameter -FilterHashtable an (gern auch -FilterXPath, aber Hashtable ist für Anfänger einfacher). Damit kannst Du das Gewünschte erreichen.
Evgenij Smirnov
-
Dankeschön. Die Zeitabfrage klappt schonmal:
Get-WinEvent -ComputerName Server2.domain.local -FilterHashtable @{ LogName='Microsoft-Windows-Backup'; ID=4; StartTime=$((Get-Date).AddDays(-2)) }
Ich habe nur keine Idee wie ich das in ein Ergebnis 1 wenn es Einträge gibt und 0 wenn es keine gibt bringen kann...
-
Ich habe es zumindest geschafft, über ein Script eine 1 auszugeben, wenn es in den letzten 36 Stunden ein erfolgreiches Backup gab. Wenn nicht, gibt es eine Fehlermeldung.
$value=(Get-WinEvent -ComputerName Server2.domain.local -FilterHashtable @{LogName='Microsoft-Windows-Backup'; ID=4; Starttime=$((Get-Date).AddHours(-36))})
if ($value -ne $null) {echo 1}
-
Ja so funktionierts, besten Dank!
$value=(Get-WinEvent -ComputerName Server2.domain.local -FilterHashtable @{LogName='Microsoft-Windows-Backup'; ID=4; Starttime=$((Get-Date).AddHours(-36))} -ErrorAction SilentlyContinue) if ($value -ne $null) {echo 1} else {echo 0}
- Als Antwort markiert -harry Dienstag, 1. Dezember 2020 16:01
-
...apropos: "echo" ist ein Alias auf Write-Output.
Das brauchst Du im Zweifel gar nicht, denn Write-Output ist einfach Ausgabe weiter in die Pipe, und wenn keine Pipe (mehr) da ist, an die Konsole halt:
if (<Bedingung>) { 1 } else { 0 }
Aliase in Skripten zu verwenden, ist kein guter Ton und ist unter Umständen nicht ganz ungefählich...
Evgenij Smirnov