Fehler in geplanten Aufgaben finden mit PowerShell


    Tags: , ,

    Scheduled Tasks mit PowerShell verwaltenViele geplante Aufgaben spielen eine wichtige Rolle bei der regelmäßigen Wartung des Systems oder von Anwendungen. Da sie meist zeitgesteuert im Hintergrund laufen, ist meist nicht immer gleich erkennbar, wenn ihre Ausführung scheitert. Mit Hilfe von PowerShell kann man relativ einfach herausfinden, ob Probleme aufgetreten sind.

    Grundsätzlich kann man auch auf der GUI der Aufgabenplanung die Historie einer Task einsehen. Dazu öffnet man die Eigenschaften einer Aufgabe und wechselt zur Registerkarte Verlauf. Das Fenster ist jedoch ziemlich klein und lässt sich nicht vergrößern, so dass es mühsam ist, dort Informationen zu finden.

    Die geringe Benutzerfreundlichkeit der Aufgabenplanung erschwert das Analysieren aufgetretener Ereignisse.

    Get-ScheduledTaskInfo

    Einige Basisdaten zu einer geplanten Aufgabe kann man mit dem Cmdlet Get-ScheduledTaskInfo abrufen. Dieses verlangt als Argument den Namen der Task, der auch den Pfad enthalten muss. Diesen kann man nach diesem Muster ermitteln:

    Get-ScheduledTask -TaskName "*Defender*" | select TaskName, TaskPath

    Der obige Aufruf würde alle geplanten Aufgaben für Microsoft Defender anzeigen. Der Ausgabe des Befehls entnimmt man dann die Daten für den Aufruf von Get-ScheduledTaskInfo. In unserem Defender-Beispiel könnte dieser so aussehen:

    Get-ScheduledTaskInfo -TaskName "\Microsoft\Windows\Windows Defender\Windows Defender Scheduled Scan"

    An Get-ScheduledTaskInfo übergibt man den Namen der Aufgabe inklusive Pfad.

    Aus dem Output des Cmdlets geht hervor, wann die Aufgabe das letzte Mal ausgeführt wurde und welchen Code sie zurückgeliefert hat. Jeder Wert ungleich null deutet auf ein Problem hin. Eine Übersicht über diverse Fehlercodes findet sich auf Microsofts Website.

    Der offensichtliche Nachteil dieses Cmdlets besteht darin, dass es nur Auskunft über die letzte Ausführung einer Task gibt. Eine mögliche Fehlermeldung, die in das Logfile geschrieben wurde, sieht man damit auch nicht.

    Log auswerten mit Get-WinEvent

    Ausführlichere Informationen zu aufgetretenen Fehlern erhält man über die Auswertung des Eventlogs. Zuständig dafür ist das Logfile

    Get-WinEvent -LogName "microsoft-windows-taskscheduler/operational"

    Dieser Befehl gibt alle Ereignisse für sämtliche Tasks aus, was man bei einer Fehlersuche aber normalerweise nicht möchte. Daher kann man die Logs mit Hilfe einer Hash-Tabelle filtern:

    In diesem Beispiel erhalten wir bis zu 500 Einträge, die nach dem 01.02.2023 geschrieben wurden, die einen Fehler dokumentieren (Level 2) und in der Nachricht den Begriff Update enthalten.

    Ausgabe auf eine bestimmte Task durch Suche in der Message einschränken

    Eine bestimmte Task kann man nur über den Inhalt der Nachricht ermitteln, was aber über den Hashtable nicht möglich ist. Diesem Zweck dient daher der anschließende Filter mittels Where-Object, der im obigen Aufruf nach der Zeichenkette "Update" sucht.

    Zusammenfassung

    Wenn eine geplante Aufgabe nicht läuft wie erwartet, konsultiert man am besten erst das Cmdlet Get-ScheduledTaskInfo. Es liefert ein paar Infos zur letzten Ausführung, darunter den Return-Code.

    Wenn diese nicht ausreichen, dann wirft man einen Blick in das Eventlog. Eine Filterung nach bestimmten Aufgaben ist mit PowerShell indes nicht ohne weiteres möglich. Vielmehr muss man dazu den Inhalt der Nachricht durchsuchen.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut

    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Verwandte Beiträge

    Weitere Links