Post 903
Windows

Task Scheduler: PowerShell-Script korrekt einrichten

Der Windows Task Scheduler ist ein mächtiges Werkzeug zur Automatisierung – aber PowerShell-Scripts damit zuverlässig auszuführen erfordert einige Handgriffe, die nicht auf den ersten Blick offensichtlich sind. Wer einfach nur den Script-Pfad einträgt, wird früher oder später von Execution-Policy-Fehlern oder hängenden Fenstern überrascht.

Warum PowerShell im Task Scheduler Probleme macht

Wenn man eine geplante Aufgabe anlegt und direkt ein .ps1-Script als Programm einträgt, verweigert Windows die Ausführung – Scripts sind keine ausführbaren Programme. PowerShell selbst muss als ausführbare Datei eingetragen werden, und das Script wird als Argument übergeben. Dazu kommen zwei weitere häufige Fallstricke: die Execution Policy verhindert die Ausführung unsignierter Scripts, und fehlende Berechtigungen führen zu stillen Fehlern.

Schritt-für-Schritt: Aufgabe korrekt konfigurieren

Eine neue geplante Aufgabe im Task Scheduler anlegen (Taskplaner öffnen → Aufgabe erstellen) und im Tab Aktionen folgende Werte eintragen:

Programm/Script:

C:windowssystem32windowspowershell1.0powershell.exe

Argumente hinzufügen:

-noprofile -noexit -executionpolicy bypass -file C:pfadzumscript.ps1

Den eigenen Script-Pfad entsprechend anpassen. Enthält der Pfad Leerzeichen, muss er in Anführungszeichen gesetzt werden:

-noprofile -noexit -executionpolicy bypass -file "C:Meine Skripteackup.ps1"

Was bedeuten die einzelnen Parameter?

-noprofile: PowerShell lädt beim Start kein Benutzerprofil ($PROFILE). Das beschleunigt den Start und verhindert, dass das Profil des ausführenden Benutzers unerwünschte Variablen oder Module lädt, die das Script beeinflussen könnten.

-noexit: Das PowerShell-Fenster bleibt nach der Script-Ausführung offen. Nützlich zur Fehlersuche – im Produktionsbetrieb kann dieser Parameter weggelassen werden, damit sich das Fenster nach Abschluss automatisch schließt.

-executionpolicy bypass: Umgeht die systemweite Execution Policy für diese Sitzung. Das ist die sauberste Methode, um das Script ohne dauerhafte Änderung der Systemrichtlinie ausführen zu können. bypass ist dabei restriktiver als unrestricted, da es nur die Richtlinienprüfung überbrückt, ohne andere Sicherheitsmechanismen zu deaktivieren.

-file: Gibt den Pfad zum auszuführenden Script an. Alles nach diesem Parameter wird als Scriptpfad (und optionale Script-Argumente) interpretiert.

Mit höchsten Rechten ausführen

Viele Scripts benötigen Administratorrechte. Im Tab Allgemein der Aufgabe die Option Mit höchsten Privilegien ausführen aktivieren. Zudem sollte unter Sicherheitsoptionen ein Konto mit Administratorrechten eingetragen sein. Für Scripts, die ohne angemeldeten Benutzer laufen sollen: Unabhängig von der Benutzeranmeldung ausführen wählen und das Passwort des Dienstkontos eingeben.

Fehlersuche: Script läuft nicht wie erwartet

Wenn die Aufgabe zwar ausgeführt wird, aber das Script scheinbar nichts tut, helfen folgende Schritte:

# Ausgabe des Scripts in Logdatei umleiten
-noprofile -executionpolicy bypass -file "C:scriptsackup.ps1" > "C:logsackup.log" 2>&1

# Alternativ: Logging direkt im Script
Start-Transcript -Path "C:logsackup.log" -Append

Im Task Scheduler selbst gibt der Tab Verlauf (History) Auskunft über Ausführungsstatus und Fehlercodes. Ein Rückgabewert von 0 bedeutet Erfolg, alles andere ist ein Fehler.

Script-Argumente übergeben

Wenn das PowerShell-Script Parameter entgegennimmt, werden diese nach dem Script-Pfad angegeben:

-noprofile -executionpolicy bypass -file "C:scriptsackup.ps1" -Quelle "D:Daten" -Ziel "E:Backup"

Mit diesen Einstellungen laufen PowerShell-Scripts im Task Scheduler zuverlässig – unabhängig davon, ob ein Benutzer angemeldet ist oder nicht.