PowerShell & Scripting
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:
- Aktion: New-ScheduledTaskAction -Execute "pwsh.exe" -Argument "-NoProfile -File C:\Scripts\job.ps1". Bis zu 32 Aktionen pro Aufgabe sind möglich.
- Trigger: New-ScheduledTaskTrigger, z. B. -Daily -At 3am oder -AtStartup. Bis zu 48 Trigger pro Aufgabe.
- Principal: New-ScheduledTaskPrincipal legt das Konto fest, etwa SYSTEM mit -LogonType ServiceAccount oder ein Dienstkonto, sowie -RunLevel Limited oder Highest.
- 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.
Further reading
Related articles
PHscripts.de | PSscripts.de
PowerShell 7: Modules and WPF GUIs - A Practical Guide
Exchange Online
PowerShell | ExchangeOnlineManagement 3.10.1 Becomes Mandatory
Microsoft 365
M365 Organization Settings via PowerShell
Microsoft 365