Die manuelle Anlage von vielen zeitgesteuerten Automatisierungsaufgaben in Windows wird komplexer, je mehr Parameter hinzukommen.
Im ersten Teil meines Blogpostings habe ich gezeigt, wie man den Windows Task Scheduler nutzen kann, um PowerShell Skripte zu bestimmten Zeitpunkten auszuführen. Wenn man allerdings mehrere, ähnliche Tasks anlegen möchte, die sich nur in manchen Parametern unterscheiden, wird die Nutzung der von Microsoft zur Verfügung gestellten Wizards schnell lästig. Ich zeige einen Weg, wie man auch ohne Wizard neue Tasks anlegen kann.
Index
Tasks mit PowerShell beschleunigen
Erneut kann man von den Möglichkeiten der PowerShell Gebrauch machen, um das Erzeugen von Tasks zu beschleunigen. Dazu stehen folgende PowerShell Cmdlets zur Verfügung:
- New-ScheduledTaskAction, um anzugeben, welches Programm man ausführt
- New-ScheduledTaskPrincipal, um den Nutzer anzugeben, unter dem der Task ausgeführt werden soll
- New-ScheduledTaskTrigger, um festzulegen, wann etwas ausgeführt wird
- New-ScheduledTask, um den Task zu aggregieren
- Register-ScheduledTask, um diesen dem Task Scheduler hinzuzufügen
Als Skript für den obigen Anwendungsfall sieht dies beispielhaft dann so aus:
1 2 3 4 5 6 7 |
$argument = "-Command `"& 'C:\temp\TestScript.ps1' -p1 'hallo' -p2 'Welt'`"" $action = New-ScheduledTaskAction -Execute 'PowerShell.exe' -Argument $argument $principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest $trigger = New-ScheduledTaskTrigger -AtStartup $task = New-ScheduledTask -Action $action -Principal $principal -Trigger $trigger Register-ScheduledTask "ExampleTask" -InputObject $task -Force |
Das Ergebnis sieht folgendermaßen aus:
Einschränkungen, die es zu beachten gilt
Dieses Skript kann man nur als Administrator ausführen!
Der auf –Command folgende String in der $argument Variable muss zusätzlich für PowerShell escaped werden. Dies erreicht man durch Nutzung von ` <string>.
Individuelle Konfiguration eines Tasks
Man kann noch in verschiedener Weise Einfluss auf die Konfiguration eines Tasks nehmen. Dies ist sowohl durch den Wizard, als auch durch die mannigfaltigen Cmdlet-Parameter möglich. Diese sind sehr gut dokumentiert. Wichtig dabei ist, nicht „Create Basic Task“, sondern „Create Task“ auszuwählen.
Den Task den eigenen Bedürfnissen anzupassen, überlasse ich an dieser Stelle dem Leser.
Fazit
Für einfache zeitgesteuerte Automatisierungsaufgaben reicht die Windows Aufgabenplanung unter Zuhilfenahme von PowerShell sehr gut. Diese Tasks alle manuell anzulegen, kann jedoch eine zeitintensive Angelegenheit werden. Außerdem wird es im Wizard schnell unübersichtlich, sobald ein PowerShell Skript viele Parameter hat.
Abhilfe schafft der Fakt, dass man den Wizard eigentlich nicht braucht, sondern den Task auch per PowerShell anlegen kann. Hier muss man dann lediglich darauf achten, dass die Syntax der Argumentübergabe stimmt. Hat man das einmal geschafft, ist das Erzeugen weiterer Aufgaben dieser Art kein Problem mehr. Ich hoffe, dass dieser Blogbeitrag dabei hilft, diese anfängliche Hürde zu überwinden.
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>