Häufig gibt es die Anforderung, PowerShell Skripte periodisch auszuführen. Es gibt eine Fülle an Frameworks, Tools und Produkten, die die Möglichkeit anbieten, Timer o.ä. zu konfigurieren. Allerdings enthält Windows bereits einen sogenannten Task Scheduler, der für meine Zwecke völlig ausreicht.
Index
PowerShell und der Task Scheduler
Den Task Scheduler findet man über die Windowssuche:
Basic Task erstellen
Dort angekommen, erstellt man einen neuen Basic Task:
Hier wählt man nun aus:
- wie der Task heißt
- wann er ausgeführt wird (Trigger)
- und welche Aktion ausgeführt werden soll.
Ich entscheide mich für Daily …
… und wähle eine Uhrzeit aus:
Außerdem soll ein Programm gestartet werden:
Nun gibt es mehrere Möglichkeiten. Man kann den Pfad zur PowerShell.exe explizit angeben oder einfach nur PowerShell.exe schreiben. Ich entscheide mich für die zweite Variante, da sie mir einfacher erscheint.
PowerShell Argumente übergeben
Nun wird es tricky. Wenn dem PowerShell-Skript Parameter übergeben werden sollen, ist die Syntax etwas gewöhnungsbedürftig.
Oder ausgeschrieben:
1 |
-Command "&'C:\temp\TestScript.ps1'-p1'hallo'-p2'welt'" |
Der Command Schalter bewirkt, dass alles Nachfolgende so ausgeführt wird, als wäre es direkt über die Kommandozeile eingegeben worden. Ich brauche hier allerdings eine ganze Zeichenfolge, nicht nur einen einzelnen Wert. Daher muss alles mit „& … “ umschlossen werden. Dies führt wiederum dazu, dass innerhalb der Zeichenkette Hochkommata zu verwenden sind.
Neuen Task aufrufen
Danach kann man den Wizard abschließen, ein neuer Task ist erstellt und auch in der Taskliste sichtbar:
Das Skript dazu ist denkbar einfach. Es nimmt nur die beiden Parameter entgegen und schreibt diese miteinander kombiniert in eine Textdatei:
1 2 3 4 5 |
Param( $p1, $p2 ) ($p1 + " " + $p2) | Out-File "C:\temp\test.txt" -Append |
Das erfolgreiche Ergebnis:
Fazit
Es ist nicht schwierig, einen einfachen Task zu erstellen, der ein PowerShell-Skript zeitgesteuert ausführt. Man muss lediglich die auf den ersten Blick etwas ungewohnte Syntax kennen, mit der man der PowerShell Argumente übergeben kann. Ist dies geschafft, steht weiteren Automatisierungsszenarien nichts mehr im Wege.
Ganz in diesem Sinne zeigt der zweite Teil dieses Blogthemas, wie man sogar die Tasks mit PowerShell anlegen kann.
Leave a Reply
<p>Danke für Ihre Anregungen, Fragen und Hinweise.<br/>Infos zum <a href="https://www.active-directory-faq.dekontakt/">Datenschutz</a></p>