Die Windows Aufgabenplanung ist ein hervorragendes Werkzeug, wenn es darum geht, immer wiederkehrende Aufgaben zu konfigurieren. Bereits im Artikel: Windows 10 Aufgabenplanung habe ich erläutert, wie man damit eine Aufgabe erstellt.
Als Task wurde damals ein Batch-Script verwendet. Batch-Scripting wird jedoch immer mehr von der Windows PowerShell abgelöst. Auch deshalb natürlich, weil diese viel mehr Möglichkeiten bietet.
Auch mit der Aufgabenplanung können PowerShell Scripte ausgeführt werden. Allerdings muss man bei der Angabe ein paar Dinge beachten. Im folgende habe ich ein kleines PowerShell Script erstellt und möchte dieses kontinuierlich über die Aufgabenplanung ausführen.
Im ersten Schritt erstellt man am besten mit der Windows PowerShell ISE ein neues Script. Da es hier nicht um das Scripting mit PowerShell geht, habe ich ein einfaches robocopy Script verwendet. Das Script wird als .ps1 Datei im Verzeichnis c:\Scripte gespeichert.

Im zweiten Schritt geht man zur Aufgabenplanung, erstellt dort eine neue Aufgabe und konfiguriert sämtliche Parameter bei Trigger, Einstellungen etc. Wichtig ist jetzt der Reiter Aktion. Dort wählt man „Programm starten“. Anschließend muss beim Programm/Skript der komplette Pfad zur PowerShell.exe angegeben werden. Beim Argument gibt man jetzt die Option -command gefolgt vom Pfad zum Skript an.
PowerShell Pfad:
C:\WindowsSystem32\WindowsPowerShellv1.0\powerShell.exe
Argument:
-command C:\Scriptebackup.ps1

Damit das Script auch ausgeführt werden kann, müssen noch die ExecutionPolicies angepasst werden. Welche es gibt und was dessen Bedeutungen sind, könnt ihr im Artikel: Auführungsrichtlinien setzen, nachlesen.
Für das obige Beispiel habe ich die Executionpolicies auf unrestricted gesetzt. Übrigens darf man hierbei nicht vergessen, dass man die PowerShell mit administrativen Rechten ausführt.
Set-ExecutionPolicy -ExecutionPolicy Unrestricted

Das könnte dich auch interessieren
- Windows 10 – Aufgabenplanung
- So erstellt man eine E-Mail Benachrichtigung mit der Windows PowerShell
- Die Aufgabeplanung mit der Windows PowerShell verwalten!
- Windows Aufgaben automatisieren – Ein Überblick
Steigere dein Wissen
Kostenlose Befehlsreferenzen und E-Books herunterladen
Aua. Mit ExecutionPolicy Unrestricted wird viel zu viel freigegeben – und insbesondere auch außerhalb der Aufgabenplanung.
Besser: zusätzlich „-Executionpolicy Bypass“ einfügen (und statt -command besser -file, -command ist für einzelne Anweisungen oder einen Skriptblock gedacht), also
PowerShell.exe -Executionpolicy Bypass -file „C:Skriptebackup.ps1“
Hallo GPBurth,
vielen Dank für deinen Beitrag. Natürlich sollte man mit „Unrestricted“ sehr vorsichtig sein. Sinnvoll wäre auch Scripte zu signieren. Wie das grundlegend funktioniert, habe ich in diesem Artikel beschrieben. PowerShell Scripte signieren
Also Muss man in Programme/skript weiterhin den Pfad zur Powershell.exe eintragen und in Argumente dann folgendes:
-Executionspolicy Bypass -file „C:PfadzumSkript.ps1“ ?
Hallo, ja sollte so funktionieren.
Hallo,
wie ist eigentlich die Notation, wenn ich dem PS1 auch noch Parameter übergeben will?
Bsp: normalerweise rufe ich das so auf
skript.ps1 -para1 max -para2 mustermann
-Executionspolicy Bypass -file “C:PfadzumSkript.ps1 -para1 max -para2 mustermann”
oder
-Executionspolicy Bypass -file “C:PfadzumSkript.ps1″ -para1 max -para2 mustermann
oder vllt. noch ganz anders?
Vielen Dank
Steffen
Hallo Steffen, also wenn du im Skript Parameter übergibst, würde ich diese vorab mit
Param()
festlegen. Also z.B. wie folgt.param
(
$Computername = "pc1"
)
Das Skript könntest du jetzt wie folge aufrufen:
script.ps1 -$Computername
. Die Executionpolicy kannst du natürlich, falls nötig, noch mit anhängen. Eine andere Alternative wäre z.B. auch der direkte Pfad zur Powershell: Also z.B.PowerShell.exe -ExecutionPolicy Bypass -File c:\script.ps1 -$Computername
Gruß Markus
Hallo Markus,
danke für die schnelle Antwort. Im Prinzip geht es um das Script hier, das ich bei MS gefunden habe.
https://gallery.technet.microsoft.com/scriptcenter/Password-Expiry-Email-177c3e27
Der klappert die AD Accounts ab und verschickt Mails an die Benutzer, deren Kennwort demnächst abläuft (bzw. aktuell im Testmodus umgeleitet an mich). Wenn ich das „von Hand“ starte und meine Parameter übergebe, läuft es und ich bekomme die Mails.
Wenn ich das Ganze per Aufgaben-Planung einkippe, passiert leider nichts.
In der Ereignis-Anzeige habe ich unter Anwendungsprotokolle/Microsoft/Windows/TaskScheduler den entscheidenden Hinweis gefunden:
—-
Die Aufgabenplanung konnte die Aktion „C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe“ in der Instanz „{a6d41b17-5d90-417b-a2f4-d18e2e18f796}“ der Aufgabe „\PasswordNotification“ nicht starten. Zusätzliche Daten: Fehlerwert: 2147942667
—-
Kurz gegoogelt, und das hier dazu gefunden …
https://blackseals.net/blog/2012/11/10/windows-aufgabe-bricht-mit-fehler-2147942667-ab/
Ich hatte bei [Starten in (optional)] den Pfad genauso wie beim [Programm/Skript]-Pfad in Hochkomma geschrieben.
Unter Programm/Skript ist das auch unbedingt erforderlich, bei [Starten in] hingegen ist es „tödlich“.
Da muß man erst einmal drauf kommen …
Also Hochkomma bei [Starten in] gelöscht und das Teil rennt wie Hulle 🙂
Danke nochmal für Deine Unterstützung, vllt. hilft meine Erkenntnis hier auch mel jemand anderem weiter.
LG Steffen
Hallo Steffen, gerne und danke für deinen Hinweis. Gruß Markus