Geplante Aufgaben anzeigen, starten, anhalten oder deaktivieren mit PowerShell

    Geplante Aufgaben mit PowerShell bearbeitenDie Aufgaben­planung ist seit mehreren Windows-Genera­tionen der zentrale Mecha­nismus, um Programme zeit­gesteuert oder abhängig von bestimmten Ereig­nissen auszu­führen. Seit PowerShell 3.0 lassen sich geplante Auf­gaben mit Hilfe mehrerer Cmdlets verwalten.

    Ein frisch installiertes Windows enthält bereits eine Vielzahl von vordefinierten Tasks, die das System regelmäßig warten. Wichtige Dienste wie der Virenscanner, das Backup-Programm oder Windows Update hängen davon ab.

    Vorhandene Tasks analysieren

    Im Lauf der Zeit kommen mit der Installation von Software immer neue Tasks dazu, die vor allem dazu dienen, Updates für die Programme automatisch herunterzuladen. Aus der Sicht des Benutzers ist das nicht immer erwünscht, wenn jedes unbedeutende Tool laufend seinen eigenen Update-Service ausführt.

    Wie etwa die Regeln für die Firewall oder Einträge in den Eventlog zeigen, ist PowerShell meist effektiver als GUI-Programme, wenn man die Einstellungen oder Daten von Systemkomponenten analysieren und anpassen möchte. So lässt die MMC-basierte Aufgabenplanung zwar ein vollständiges Management der Tasks zu, erfordert aber ein relativ umständliches Navigieren durch die Hierarchie und zahlreiche Registerkarten.

    Geplante Aufgaben anzeigen mit Get-ScheduledTask

    Wenn man sich einen Überblick verschaffen möchte, welche Aufgaben im System von wem definiert wurden und welches Status sie haben, dann hilft hier Get-ScheduledTask weiter. Ruft man es ohne Parameter auf, dann zeigt es alle vorhandenen Tasks inklusive der Eigenschaften TaskPath, TaskName und State.

    Der TaskPath gibt Auskunft über die Position einer Aufgabe in der Baumstruktur der Aufgaben­verwaltung. Sie wird etwa benötigt, wenn man Details zu einer Task abrufen möchte. Mögliche Werte für den Status sind Ready, Running und Disabled.

    Liste der geplanten Aufgaben nach verschiedenen Kriterien filtern mit Get-ScheduledTask.

    Um etwa alle Aufgaben anzuzeigen, die deaktiviert sind, gibt man

    Get-ScheduledTask | ? state -eq Disabled

    ein. Get-ScheduledTask erlaubt die Einschränkung der Abfrage mit Hilfe von TaskName und TaskPath, wobei beide Wildcards akzeptieren:

    Get-ScheduledTask -TaskPath \Microsoft\Windows\Win*

    Aufgabendetails auslesen

    Möchte man detaillierte Informationen zu einer bestimmten Aufgabe, dann liefert diese das Cmdlet Get-ScheduledTaskInfo. Zu den Angaben, die man damit erhält, gehört die Zeit des letzten und des nächsten Starts, die Zahl der verpassten Läufe und der Rückgabewert der letzten Ausführung.

    Nachdem man bei Get-ScheduledTaskInfo eine Aufgabe über den TaskPath spezifiziert, ist es einfacher, wenn man den bloßen Namen an Get-ScheduledTask übergibt und das Ergebnis an Get-ScheduledTaskInfo weiterleitet:

    Get-ScheduledTask StartComponentCleanup | Get-ScheduledTaskInfo

    Get-ScheduledTaskInfo liefert Details zu den geplanten Aufgaben

    Die von Get-ScheduledTaskInfo gelieferten Informationen kann man auch verwenden, um bestimmte Aufgaben auszufiltern:

    Get-ScheduledTask | Get-ScheduledTaskInfo | ? NumberOfMissedRuns -gt 0

    Dieser Befehl zeigt alle geplanten Aufgaben an, deren Ausführung verpasst wurde.

    Aufgaben deaktivieren

    Möchte man bestimmte Tasks deaktivieren, etwa weil ihre Ausführung regelmäßig scheitert, dann ist dafür das Cmdlet Disable-ScheduledTask zuständig. Dieses kann man wie Get-ScheduledTask mit den Parametern TaskPath oder TaskName aufrufen, um es auf bestimmte Aufgaben anzuwenden, allerdings ohne Verwendung von Wildcards:

    Disable-ScheduledTask -TaskName StartComponentCleanup

    In den meisten Fällen wird man jedoch eher die Liste anhand bestimmter Kriterien filtern und dann an Disable-ScheduledTask übergeben:

    Get-ScheduledTask | Get-ScheduledTaskInfo | ? NumberOfMissedRuns -gt 10 | Disable-ScheduledTask

    Tasks aktivieren, stoppen, starten, löschen

    Nach dem gleichen Muster kann man geplante Aufgaben wieder aktivieren, anhalten oder fortsetzen. Dafür sind die Cmdlets Enable-ScheduledTask, Stop-ScheduledTask und Start-ScheduledTask vorgesehen.

    Möchte man etwa alle aktuell laufenden Aufgaben anhalten, dann könnte man dies folgendermaßen tun:

    Get-ScheduledTask | ? State -eq running | Stop-ScheduledTask

    Soll eine geplante Aufgabe nicht nur angehalten oder deaktiviert, sondern komplett entfernt werden, dann dient Unregister-ScheduledTask diesem Zweck.

    Keine Kommentare