Mit wenigen Klicks kann man auch ein Windows PowerShell Script in die Aufgabenplanung einbinden

Auch mit einem Windows Powershell Script in der Aufgabenplanung kann man automatisch Aufgaben ausführen lassen

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.

Windows PowerShell Script in die Windows Aufgabenplanung einbinden
Windows PowerShell Script in die Windows Aufgabenplanung einbinden

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:\Windows\System32\WindowsPowerShell\v1.0\powerShell.exe

Argument:

-command "C:\Scripte\backup.ps1"
Windows PowerShell Script in die Windows Aufgabenplanung einbinden: Pfad und Skript angeben
Windows PowerShell Script in die Windows Aufgabenplanung einbinden: Pfad und Skript angeben

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 Aritkel: 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
Windows PowerShell Script in die Windows Aufgabenplanung einbinden: Ausführungsrichtlinie setzen
Windows PowerShell Script in die Windows Aufgabenplanung einbinden: Ausführungsrichtlinie setzen

Das könnte dich auch interessieren

8 Kommentare

  1. 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” ?

  2. 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

  3. 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

Kommentare sind deaktiviert.