Register-ScheduledTask: Geplante Aufgaben erstellen mit PowerShell


    Tags: ,

    Geplante Aufgaben mit PowerShell bearbeitenMit geplanten Auf­gaben lassen sich Pro­gramme und Scripts zeitge­steuert oder abhängig von be­stimm­ten Ereig­nissen ausführen. Seit der Version 4.0 kann auch Power­Shell solche Tasks ver­walten. Für das An­legen einer neuen Auf­gabe muss man meist mehrere Cmdlets bemühen.

    Die Aufgaben­planung ist ein mächtiges Werk­zeug, das Microsoft für eine Reihe von System­prozessen selbst nutzt. Typische Kandidaten für die zeit­gesteuerte Aus­führung sind etwa Backup- oder Defrag­mentier­programme. Neben zeitlich festgelegten Aktionen kennt die Aufgaben­verwaltung noch mehrere Auslöser, um eine Anwendung oder ein Script zu starten (Anmelden eines Benutzers, Start des Systems, etc.).

    Einstellungen mit separaten Cmdlets vorbereiten

    Anstatt eine neue Aufgabe auf der grafischen Oberfläche zusammen­zuklicken, kann man sie auch mit PowerShell erstellen. Das ist vor allem dann interessant, wenn man eine Task für Server Core oder Nano Server erstellen will, wo man keine GUI hat. Unter Nano Server könnte man damit das Herunterladen und Installieren von Updates automatisieren.

    Da eine geplante Aufgabe zahlreiche Einstellungen vorsieht, verteilt PowerShell das Anlegen einer neuen Task auf mehrere Cmdlets. So muss man etwa den Auslöser für eine Aufgabe als eigenes Objekt definieren und dann bei der Registrierung der Task angeben. Das Gleiche gilt für die auszuführende Aktion sowie die zahlreichen Optionen einer geplanten Aufgabe.

    Zeitplan festlegen

    Daher ruft man im ersten Schritt New-ScheduledTaskTrigger auf und legt dort fest, wann oder unter welchen Bedingungen die Aufgabe ausgelöst werden soll.

    Die Parameter von New-ScheduledTaskTrigger bilden die Einstellungen aus der GUI ab.

    Zur Auswahl stehen dort die Parameter Once, Daily und Weekly, für die man mit dem Schalter -At die Uhrzeit angibt, zu der die Task starten soll. Alternativ kann man sich für die Ereignisse AtStartup und AtLogon entscheiden, die beim Booten des PCs oder dem Anmelden des Benutzers zutreffen.

    $trig = New-ScheduledTaskTrigger -Daily -At 21:00 -DaysInterval 2

    Dieser Befehl definiert einen Trigger, der eine Aktion alle zwei Tage um 21:00 auslöst und speichert das Objekt vom Typ MSFT_TaskWeeklyTrigger für die spätere Verwendung in der Variable $trig. Das nächste Beispiel erzeugt einen Trigger, der jeden Montag und Freitag um 21:00 startet:

    $trig = New-ScheduledTaskTrigger -weekly -At 21:00 -DaysOfWeek @("Monday","Friday")

    Auszuführende Aktion definieren

    Im darauf folgenden Schritt definiert man mit dem Cmdlet New-ScheduledTaskAction die Aktion, die von der Aufgaben­planung künftig zeit- oder ereignisgesteuert ausgeführt wird:

    $action = New-ScheduledTaskAction -WorkingDirectory $env:TEMP `
    -Execute c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe `
    -Argument "-Command 'Remove-Item *.tmp -Force -Recurse'"

    Dieser Aufruf legt fest, dass zum gegebenen Zeitpunkt PowerShell starten und alle Dateien vom Typ *.tmp in %TEMP% löschen soll.

    Zusätzliche Optionen auswählen

    Schließlich kann man noch mit New-ScheduledTaskSettingsSet verschiedene Einstellungen konfigurieren.

    Die weiteren Optionen für eine geplante Aufgabe verteilen sich beim grafischen Tool auf 2 Dialoge.

    Dazu zählen unter anderem, dass die Aufgabe startet, wenn der PC untätig ist (RunOnlyIfIdle), im Akkubetrieb läuft (AllowStartIfOnBatteries) oder über eine bestimmte Netzwerk­verbindung verfügt (NetworkName).

    $conf = New-ScheduledTaskSettingsSet -RunOnlyIfIdle -WakeToRun

    Dieser Befehl würde festlegen, dass die Task nur läuft, wenn sich der PC im Leerlauf befindet und dass ihn die Aufgabenplanung aus dem Standby aufwecken darf. Sämtliche unterstützte Schalter finden sich in der TechNet-Beschreibung des Cmdlets.

    Task registrieren

    Nun kann man sich daran machen, die Task in die Aufgaben­verwaltung einzutragen. Hier könnte man den Zwischenschritt über New-ScheduledTask nehmen, das aber nur ein Objekt mit der Task-Definition erzeugt und dieses noch nicht im System registriert.

    Der eigentlichen Definition einer neuen Aufgabe dient das Cmdlet Register-ScheduledTask. Neben der bereits vordefinierten Aktion, dem Trigger und den Einstellungen aus den obigen Aufrufen erwartet es noch den Namen der Task. Auf Wunsch kann man noch den Account angeben, unter dem die Aufgabe laufen soll, oder die Position im Aufgabenpfad sowie diverse weitere Eigenschaften festlegen.

    Register-ScheduledTask -TaskName DelTemp -TaskPath "\PS" `
    -Action $action -Settings $conf -Trigger $trig

    Dieses Kommando erstellt eine Aufgabe mit dem Namen DelTemp im Pfad \PS und mit den zuvor definierten Einstellungen für Aktion, Trigger und sonstige Optionen.

    Die Aufgabenplanung spiegelt die Einstellungen wider, die mit PowerShell für die neue Task gesetzt wurden.

    Bei Bedarf kann man den Befehl mit dem Parameter CimSession auch auf einen Remote-PC anwenden.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut
    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Verwandte Beiträge

    Weitere Links