Geplante Aufgaben (Scheduled Tasks)

Overview

Die Windows-Aufgabenplanung (Task Scheduler) führt Programme und Skripte zeitgesteuert, beim Start, bei der Anmeldung oder bei Ereignissen aus. Das PowerShell-Modul ScheduledTasks verwaltet diese Aufgaben per Cmdlet. Dadurch lassen sich Aufgaben reproduzierbar und auf vielen Servern gleich einrichten, etwa für Bereinigungen, Berichte oder Synchronisationen.

Das Modul enthält 19 Cmdlets, darunter New-ScheduledTaskAction, New-ScheduledTaskTrigger, New-ScheduledTaskPrincipal, New-ScheduledTaskSettingsSet, Register-ScheduledTask, Start-ScheduledTask und Get-ScheduledTaskInfo. Für Failover-Cluster gibt es eigene Clustered-Varianten.

Abgrenzung: Das Modul ist nur unter Windows verfügbar. Die Hintergrundjobs von PowerShell (Start-Job) laufen nur innerhalb einer Sitzung und überleben keinen Neustart. Für Cloud-Szenarien sind Azure Automation oder Azure Functions die Alternativen.

How it works

Eine Aufgabe besteht aus vier Bausteinen:

  1. Aktion: New-ScheduledTaskAction -Execute "pwsh.exe" -Argument "-NoProfile -File C:\Scripts\job.ps1". Bis zu 32 Aktionen pro Aufgabe sind möglich.
  2. Trigger: New-ScheduledTaskTrigger, z. B. -Daily -At 3am oder -AtStartup. Bis zu 48 Trigger pro Aufgabe.
  3. Principal: New-ScheduledTaskPrincipal legt das Konto fest, etwa SYSTEM mit -LogonType ServiceAccount oder ein Dienstkonto, sowie -RunLevel Limited oder Highest.
  4. Einstellungen: New-ScheduledTaskSettingsSet regelt Verhalten wie Nachholen verpasster Läufe (-StartWhenAvailable).

Register-ScheduledTask fügt die Bausteine zusammen und registriert die Aufgabe, alternativ aus einer XML-Definition (-Xml). Export-ScheduledTask liefert die XML einer bestehenden Aufgabe, Get-ScheduledTaskInfo zeigt letzten Lauf und Ergebnis.

Benefits

  • Reproduzierbar: Aufgaben entstehen per Skript identisch auf allen Servern, Klickfehler in der GUI entfallen
  • Versionierbar: Die Definition liegt im Repository, Änderungen sind nachvollziehbar
  • Ohne Zusatzsoftware: Die Aufgabenplanung ist Teil jedes Windows-Systems
  • Überwachbar: Get-ScheduledTaskInfo liefert Laufzeit und Ergebnis für Monitoring und Reports

Practical example

Eine Kanzlei mit 90 Mitarbeitenden betreibt vier Dateiserver, auf denen nachts ein Skript temporäre Scan-Ordner bereinigt. Die Aufgaben waren von Hand angelegt und liefen teils unter einem persönlichen Admin-Konto, das nach einem Kennwortwechsel scheiterte. Die IT erstellt die Aufgabe per Skript mit einem gruppenverwalteten Dienstkonto, verteilt sie auf alle vier Server und prüft den letzten Lauf wöchentlich mit Get-ScheduledTaskInfo. Ausfälle nach Kennwortänderungen gibt es nicht mehr.

Things to keep in mind

  • Keine persönlichen Admin-Konten verwenden, sondern SYSTEM, ein gruppenverwaltetes Dienstkonto (gMSA) oder ein Dienstkonto mit minimalen Rechten
  • Skripte mit -NoProfile und vollem Pfad aufrufen und bewusst zwischen powershell.exe (5.1) und pwsh.exe (7) wählen
  • Im Skript selbst protokollieren und Exitcodes setzen, die Aufgabenplanung zeigt sonst nur „erfolgreich gestartet“
  • Skriptdateien vor Schreibzugriff durch Standardbenutzer schützen, weil die Aufgabe sie mit hohen Rechten ausführt

Conclusion

Geplante Aufgaben sind der einfachste Weg, PowerShell-Skripte on-premises regelmäßig laufen zu lassen. Per Skript angelegt und mit Dienstkonto betrieben, sind sie zuverlässig und prüfbar.