none
Windows Backup Ereignisanzeige per PowerShell abfragen RRS feed

  • 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!

    Dienstag, 1. Dezember 2020 13:51

Antworten

  • Moin,

    bitte Code als Code posten (2. Button von rechts)!

    Fehlermeldung kannst Du mit -ErrorAction SilentlyContinue unterdrücken.


    Evgenij Smirnov

    http://evgenij.smirnov.de

    • Als Antwort markiert -harry Dienstag, 1. Dezember 2020 16:01
    Dienstag, 1. Dezember 2020 15:49
  • 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
    Dienstag, 1. Dezember 2020 16:00

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

    http://evgenij.smirnov.de

    Dienstag, 1. Dezember 2020 13:56
  • 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...

    Dienstag, 1. Dezember 2020 14:20
  • 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}

    Dienstag, 1. Dezember 2020 15:10
  • Moin,

    bitte Code als Code posten (2. Button von rechts)!

    Fehlermeldung kannst Du mit -ErrorAction SilentlyContinue unterdrücken.


    Evgenij Smirnov

    http://evgenij.smirnov.de

    • Als Antwort markiert -harry Dienstag, 1. Dezember 2020 16:01
    Dienstag, 1. Dezember 2020 15:49
  • 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
    Dienstag, 1. Dezember 2020 16:00
  • ...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

    http://evgenij.smirnov.de

    Dienstag, 1. Dezember 2020 16:26