Tags: PowerShell, System-Management, Migration
Wenn man eigene geplante Aufgaben auf einen neuen Rechner migrieren will, dann bietet die grafische Aufgabenplanung dafür eine Import- und Exportfunktion. Diese funktioniert aber immer nur für eine einzelne Task. PowerShell ist hier flexibler, hält aber ein paar Fallstricke bereit.
Geplante Aufgaben eignen sich für eine ganze Reihe von Anwendungen, typischerweise für die Systemwartung. Ein Beispiel dafür ist die etwa die regelmäßige Neuindizierung der WSUS-Datenbank. Sie können aber nicht nur periodisch laufen, sondern auch abhängig von Ereignissen, etwa beim Logon oder Systemstart.
Mehrere Management-Tools
Für das Management von Scheduled Tasks bringt Windows mehrere Tools mit. Dazu zählen die MMC-basierte Aufgabenplanung, das Windows Admin Center, das Kommandozeilen-Tool schtask.exe oder PowerShell. Benötigt man bestimmte geplante Aufgaben auf vielen Rechnern, dann kann man sie auch über Gruppenrichtlinien erstellen.
Das PowerShell-Modul ScheduledTasks umfasst aktuell 24 Cmdlets und Funktionen, mit denen sich praktisch die gesamte Verwaltung von geplanten Aufgaben erledigen lässt. Um sich die Eigenschaften von Tasks anzeigen zu lassen, die auf einen anderen Rechner übertragen werden sollen, ruft man Get-ScheduledTask auf.
Aufgaben exportieren
Da es ohne Parameter alle Aufgaben ausgibt, wird man in der Regel zumindest den TaskPath spezifizieren, unter dem sich die benötigten Aufgaben befinden, etwa
Get-ScheduledTask -TaskPath \WSUS\
Das Ergebnis kann man gleich an Export-ScheduledTask über eine Pipe weiteleiten und mit Out-File in eine Datei schreiben:
Get-ScheduledTask -TaskPath \WSUS\| Export-ScheduledTask | OutFile mytask.xml
Wie man an der Namensendung der Ausgabedatei erkennt, konvertiert Export-ScheduledTask die Einstellungen der Aufgaben im XML-Format. Es handelt sich dabei um das gleiche, das auch die grafische Aufgabenverwaltung nutzt.
Schwierigkeiten treten auf, sobald sich beim obigen Befehl mehr als eine Aufgabe im angegebenen Pfad befindet. In diesem Fall gibt das Cmdlet zwar das XML der ersten Aufgabe korrekt aus, aber dann erhält man die irreführende Fehlermeldung
Export-ScheduledTask : Falscher Parameter.
Die Ursache liegt einfach darin, dass Export-ScheduledTask immer nur eine Aufgabe verarbeiten kann und scheitert, wenn es über die Pipeline mehrere davon erhält. Daher muss man das Cmdlet in einer Schleife aufrufen und so über alle Tasks iterieren:
Get-ScheduledTask -TaskPath "\WSUS\" |
foreach {Export-ScheduledTask -TaskName $_.TaskName -TaskPath "\WSUS\" |
Out-File ($_.TaskName + ".xml") }
Scheduled Tasks reimportieren
Um die exportierten Aufgaben auf einem anderen Rechner einzulesen, wird man vergeblich nach einem Cmdlet namens Import-ScheduledTask suchen. Zuständig ist hier vielmehr Register-ScheduledTask, mit dem man ansonsten von Grund auf neue Aufgaben erstellen kann.
In diesem Fall verwendet man es jedoch mit dem Parameter XML, um eine Task zu importieren. Der naheliegende Aufruf nach dem Muster
Register-ScheduledTask -xml .\wartung.xml -TaskName MyTask
führt jedoch zur Fehlermeldung:
Register-ScheduledTask : Die Aufgaben-XML ist ungültig.
(1,2)::FEHLER: Fehlerhafte Syntax in einem Dokument.
Das Cmdlet erwartet die XML-Daten als einen String, ist aber nicht in der Lage, die Datei entsprechend einzulesen. Daher muss man mit Get-Content nachhelfen:
Register-ScheduledTask -xml (Get-Content -Raw wartung.xml) -TaskName MyTask
Möchte man mehrere exportierte Aufgaben einlesen, dann könnte man so vorgehen:
dir *.xml |
foreach {Register-ScheduledTask -xml (Get-Content -Raw $_.Name) -TaskName $_.BaseName}
In diesem Beispiel würden die neuen Tasks die Namen der jeweiligen Exportdateien ohne Endung erhalten.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- ScriptRunner Portal Edition R5: Konfiguration von Abfragen, OpenID-Support, Web-API statt IIS
- Fehler in geplanten Aufgaben finden mit PowerShell
- WSUS-Bereinigung als geplante Aufgabe ausführen
- Programme (remote) mit PowerShell deinstallieren
- Register-ScheduledTask: Geplante Aufgaben erstellen mit PowerShell
Weitere Links