Tags: System-Management, PowerShell
Die Aufgabenplanung ist seit mehreren Windows-Generationen der zentrale Mechanismus, um Programme zeitgesteuert oder abhängig von bestimmten Ereignissen auszuführen. Seit PowerShell 3.0 lassen sich geplante Aufgaben 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 Aufgabenverwaltung. 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.
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
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.
Täglich Know-how für IT-Pros mit unserem Newsletter
Ähnliche Beiträge
Weitere Links