Müssen Sie viele geplante Aufgaben erstellen oder die Erstellung geplanter Aufgaben automatisieren? Wenn ja, haben Sie Glück. In diesem Artikel erfahren Sie, wie Sie geplante Aufgaben mit PowerShell verwalten.
Geplante Aufgaben, die einfache Aktionen ausführen, sind schnell zu erstellen und komfortabel genug, um sie über die Taskplaner-App-Oberfläche (GUI) zu wiederholen. Systemadministratoren oder Entwickler müssen jedoch möglicherweise kompliziertere Aufgaben mit mehreren Zeitplänen, Triggern oder Argumenten bereitstellen.
Glücklicherweise können Sie PowerShell verwenden, um geplante Aufgaben zu erstellen und zu verwalten. Das Verwalten geplanter Aufgaben mit PowerShell wird mithilfe des in Windows integrierten ScheduledTasks-Moduls ermöglicht.
Inhaltsverzeichnis
Voraussetzungen
Da es sich um einen Learning-by-Doing-Artikel handelt, gibt es einige Voraussetzungen, damit Sie folgen können. Im Folgenden finden Sie die Anforderungen zum Erstellen geplanter PowerShell-Aufgaben mit PowerShell.
- Die Beispiele in diesem Artikel verwenden Windows 10. Aber Windows Server 2012 und neuer können das gleiche tun.
- Windows PowerShell 5.1 oder PowerShell 7.
- Es wäre hilfreich, wenn Sie einen Skript-Editor wie Visual Studio Code, Notepad ++ oder Windows PowerShell ISE hätten.
Erstellen einer neuen geplanten Aufgabe
Für eine geplante Aufgabe sind mindestens zwei Komponenten erforderlich: action und trigger. Das Hinzufügen eines Sicherheitskontexts und einer Reihe zugehöriger Einstellungen ist optional. Zum besseren Verständnis lesen Sie die kurze Erklärung für jede geplante Task–Komponente unten:
- Action – die Aktion, die von der geplanten Task ausgeführt wird. Eine Aktion besteht normalerweise darin, ein Programm oder ein Skript auszuführen. Eine geplante Aufgabe kann mehrere Aktionen haben.
- Trigger – steuert, wann die geplante Aufgabe ausgeführt wird. Auslöser können zeitbasiert sein, z. B. das Festlegen eines Zeitplans für die tägliche oder stündliche Wiederholung. Auslöser können auch aktivitätsbasiert sein, d. h. eine Aufgabe wird basierend auf erkannten Aktivitäten wie dem Start des Computers, der Anmeldung eines Benutzers oder protokollierten Ereignissen ausgeführt.
- Principal – steuert den Sicherheitskontext, der zum Ausführen der geplanten Aufgabe verwendet wird. Ein Prinzipal umfasst unter anderem das Benutzerkonto und die erforderlichen Berechtigungen, die von der geplanten Aufgabe verwendet werden.
- Einstellungen – ist eine Reihe von Optionen und Bedingungen, die steuert, wie die geplante Aufgabe Verhalten. Sie können beispielsweise eine Aufgabe so anpassen, dass sie nach einer fortlaufenden Anzahl von Tagen, an denen die Aufgabe nicht verwendet wird, entfernt wird.
Während einer geplanten Aufgabenerstellung sind der Principal und die Einstellungen nicht explizit erforderlich. Stattdessen werden die Standardwerte verwendet.
Erstellen einer Aufgabenaktion
Wenn Sie möchten, dass eine geplante Aufgabe etwas ausführt, erstellen Sie eine neue Aufgabenaktion. In diesem Beispiel erstellen Sie eine Aufgabe, die die PowerShell aufruft.exe und führen Sie ein Skript aus. Stellen Sie sicher, dass Sie Ihren Skript-Editor bereit haben.
Beachten Sie, dass das folgende Skript nur ein zufälliges Beispiel ist und Sie es nicht verwenden müssen. Sie können jedes Skript verwenden, das Sie möchten. Die Verwendung des folgenden Skripts führt jedoch zu einem leicht überprüfbaren Ergebnis, das bestätigen kann, ob die geplante Aufgabe funktioniert hat.
Das folgende Beispielskript ruft bei Ausführung die zehn aktuellsten Ereignisse aus dem Anwendungsereignisprotokoll ab. Exportieren Sie dann die Ereignisse in eine neue XML-Datei im c:\temp ordner. Kopieren Sie den folgenden Code, fügen Sie ihn in Ihren Skript-Editor ein und speichern Sie ihn mit dem Dateinamen Get-LatestAppLog.ps1 in einem beliebigen Ordner.
Der folgende Code verwendet die New-ScheduledTaskAction
, um ein neues Aktionsobjekt für geplante Aufgaben zu erstellen, das in der Variablen $taskAction
gespeichert ist. Diese Aktion ruft die powershell.exe
ausführbare Datei auf und übergibt das Argument, um die C:\scripts\Get-LatestAppLog.ps1 .
Kopieren Sie den obigen Befehl und führen Sie ihn in PowerShell aus. Das resultierende Objekt in der Variablen $taskAction
sollte wie im folgenden Screenshot aussehen.
Hinzufügen eines Triggers
Nachdem Sie nun eine Task-Aktion erstellt haben, müssen Sie im nächsten Schritt definieren, wann die Task lauf. Das Cmdlet zum Erstellen eines Triggers ist das New-ScheduledTaskTrigger
Cmdlet. Der folgende Befehl erstellt einen Trigger, der täglich um 3 Uhr ausgeführt wird. Kopieren Sie den Code und führen Sie ihn in PowerShell aus.
# Create a new trigger (Daily at 3 AM)$taskTrigger = New-ScheduledTaskTrigger -Daily -At 3PM$tasktrigger
Das resultierende Objekt in der Variablen $tasktrigger
sollte genauso aussehen wie das Bild unten.
Registrieren der Aufgabe
Bisher haben Sie die Basisanforderungen zum Erstellen einer neuen geplanten Aufgabe erstellt. Der nächste Schritt besteht darin, die geplante Aufgabe zu erstellen und im System zu registrieren.
Der folgende Code verwendet das Cmdlet Register-ScheduledTask
, um die geplante Aufgabe zu registrieren. Der Parameter -Action
wird nur benötigt, um das Task-Aktionsobjekt zu übergeben, das in der Variablen $taskAction
gespeichert ist. Der Parameter -Trigger
wird benötigt, um den Inhalt der Variablen $taskTrigger
zu übergeben.
# Register the new PowerShell scheduled task# The name of your scheduled task.$taskName = "ExportAppLog"# Describe the scheduled task.$description = "Export the 10 newest events in the application log"# Register the scheduled taskRegister-ScheduledTask ` -TaskName $taskName ` -Action $taskAction ` -Trigger $taskTrigger ` -Description $description
Kopieren Sie den obigen Code und führen Sie ihn in PowerShell aus. Als Ergebnis wird die neue geplante Aufgabe registriert, wie unten gezeigt.
Ausführen der Aufgabe
Nachdem Sie eine geplante Aufgabe erstellt haben, sollten Sie bestätigen, dass die geplante Aufgabe jetzt im System vorhanden ist. Öffnen Sie den Taskplaner und suchen Sie die geplante Aufgabe aus der Liste. Sie sollten die registrierte Aufgabe in der Liste sehen.
Sie können auch bestätigen, dass die registrierte geplante Aufgabe vorhanden ist, indem Sie den folgenden PowerShell-Befehl ausführen.
Get-ScheduledTaskInfo -TaskName ExportAppLog
Sie sollten dann eine ähnliche Ausgabe sehen, wie der Screenshot des Ergebnisses unten.
Und schließlich sollte Ihre neue geplante Aufgabe daran arbeiten, festzustellen, ob das, was Sie bisher getan haben, erfolgreich war. Um die geplante Aufgabe zu testen, können Sie entweder auf den nächsten Ausführungszeitplan warten oder den folgenden Befehl zum manuellen Auslösen verwenden.
Start-ScheduledTask -TaskName ExportAppLog
Nachdem Sie den Code ausgeführt haben, sollten Sie ein ähnliches Ergebnis wie das unten gezeigte sehen. Wie Sie sehen, wurde beim Ausführen des Codes eine XML-Datei erstellt, die angibt, dass die geplante Aufgabe wie erwartet funktioniert hat.
Aktualisieren einer vorhandenen geplanten Aufgabe
Nach dem Erstellen einer geplanten Aufgabe müssen möglicherweise einige Aspekte aktualisiert werden. Vielleicht möchten Sie es eine Stunde früher ausführen lassen oder den Speicherort der Skriptdatei ändern. Dies sind einige der Änderungen an der geplanten Aufgabe, die möglicherweise erforderlich sind.
In den nächsten Abschnitten erfahren Sie, wie Sie mit PowerShell Änderungen an vorhandenen registrierten geplanten Aufgaben vornehmen.
Ändern des Benutzerkontos, der Sicherheitsoptionen und der Kompatibilitätseinstellungen
Im vorherigen Abschnitt wird die geplante Aufgabe unter demselben Benutzerkontokontext ausgeführt, in dem sie erstellt wurde. Was ist, wenn die Aufgabe mit einem anderen Benutzerkonto ausgeführt werden muss, z. B. einem Dienstkonto.
In diesem Beispiel ändern Sie die Sicherheitsoptionen des geplanten Tasks auf die folgenden Einstellungen.
- Sie müssen das Benutzerkonto ändern, um die geplante Aufgabe auszuführen.
- Ermöglicht die Ausführung der Aufgabe, unabhängig davon, ob der Benutzer angemeldet ist oder nicht.
- Führen Sie das mit den höchsten Privilegien aus.
- Setzen Sie die Taskkompatibilität auf Windows 10.
Die erste Zeile im folgenden Code erstellt ein Principal-Objekt mit dem neuen Benutzerkonto und legt fest, dass die Aufgabe mit den höchsten Berechtigungen ausgeführt wird. Stellen Sie sicher, dass Sie den Wert des Parameters -UserID
nach Bedarf ändern. Die zweite Zeile konfiguriert die Kompatibilität der Aufgabe mit Windows 10.
Schließlich aktualisiert die dritte Zeile die ExportAppLog
**geplante Aufgabe unter Verwendung der in the $taskPrincipal
und $taskSettings
Variablen gespeicherten Werte. Kopieren Sie den folgenden Code und führen Sie ihn in PowerShell aus.
# Set the task principal's user ID and run level.$taskPrincipal = New-ScheduledTaskPrincipal -UserId 'DEVPC\svcTask' -RunLevel Highest# Set the task compatibility value to Windows 10.$taskSettings = New-ScheduledTaskSettingsSet -Compatibility Win8# Update the task principal settingsSet-ScheduledTask -TaskName 'ExportAppLog' -Principal $taskPrincipal -Settings $taskSettings
Sie werden feststellen, dass der
-Compatibility
ParameterwertWin8
. Lass dich nicht verwirren. Es scheint, dass Microsoft die Auswahl der „neuesten“ Version seit Windows 8 nicht aktualisiert hat. Die Angabe desWin8
-Werts führt jedoch zu Windows 10-Kompatibilität.
Als nächstes verwendet der folgende Befehl das Set-ScheduledTask
Cmdlet, um die vorhandene ExportAppLog
**geplante Aufgabe zu aktualisieren. Stellen Sie sicher, dass Sie den Kennwortwert im Parameter -Password
ändern, um das korrekte Kennwort des Benutzerkontos zu verwenden.
# Update the task user account and passwordSet-ScheduledTask -TaskName 'ExportAppLog' -User $taskPrincipal.UserID -Password 'PASSWORD'
Nach dem Ausführen des obigen Befehls wird die geplante Aufgabe aktualisiert. Wenn Sie die geplante Aufgabe aktivieren, können Sie bestätigen, dass sich die Sicherheitsoptionen geändert haben.
Ändern des Auslösers
Manchmal muss der Auslöseplan geändert werden. Vielleicht wegen einiger betrieblicher Anpassungen oder Ressourcenoptimierung. In jedem Fall können Sie PowerShell auch verwenden, um Trigger zu einer geplanten Aufgabe zu ersetzen oder hinzuzufügen.
Derzeit wird die geplante Aufgabe ExportAppLog jeden Tag um 3 Uhr ausgelöst. Angenommen, Sie müssen den Trigger-Zeitplan täglich um 4:30 Uhr und 1:00 Uhr ändern. Sie müssen zunächst zwei neue Task-Trigger-Objekte für die beiden Zeitpläne erstellen.
$taskTrigger1 = New-ScheduledTaskTrigger -Daily -At 4:30PM$taskTrigger2 = New-ScheduledTaskTrigger -Daily -At 1:00AM
Verwenden Sie dann den folgenden Befehl, um den Trigger der geplanten Aufgabe zu aktualisieren. Sie werden feststellen, dass der Parameter -Trigger
die beiden Task-Trigger-Objekte akzeptiert, nämlich $taskTrigger1
und $taskTrigger2
.
Da Sie eine geplante Aufgabe mit einem für das Benutzerkonto gespeicherten Kennwort aktualisieren, müssen Sie außerdem die Werte -User
und -Password
erneut angeben.
Set-ScheduledTask -TaskName 'ExportAppLog' -Trigger $taskTrigger1,$taskTrigger2 -User 'DEVPC\svcTask' -Password 'PASSWORD'
Unten ist das erwartete Ergebnis nach dem Ausführen des Codes.
Und wie Sie unten sehen können, gibt es jetzt zwei Trigger in der geplanten Aufgabe ExportAppLog.
Löschen und Wiederherstellen einer geplanten Aufgabe
Geplante Aufgaben können mit der Zeit veraltet sein. Irgendwann müssen Sie möglicherweise die Haushaltsführung für geplante Aufgaben durchführen. In diesem Abschnitt erfahren Sie, wie Sie das geplante Löschen von Aufgaben in PowerShell verwalten.
Sichern eines geplanten Tasks
Bevor Sie mit dem Löschen geplanter Tasks fortfahren, empfiehlt es sich, zuerst ein Backup zu erstellen. Durch das Sichern geplanter Aufgaben erhalten Sie einen Wiederherstellungspunkt, wenn etwas schief geht.
Es gibt kein integriertes Cmdlet zum Erstellen einer geplanten Tasksicherung. Aber alles in PowerShell ist ein Objekt, und das Exportieren von Objekten in eine Datei ist möglich. Wenn Sie ein Objekt in einer Datei sichern müssen, verwenden Sie das Cmdlet Import-Clixml
.
Der folgende Beispielcode exportiert die geplante Aufgabe mit dem Namen ExportAppLog in eine Datei. Sie können den Dateinamen und den Speicherort nach Ihren Wünschen ändern.
Das Bild unten zeigt die erwartete XML-Ausgabedatei an.
Löschen einer geplanten Aufgabe
Sobald Sie eine Sicherung der geplanten Aufgabe gesichert haben, können Sie diese geplante Aufgabe jetzt entfernen. Der folgende Code löscht die geplante Aufgabe mit dem Namen ExportAppLog. Kopieren Sie den folgenden Code und führen Sie ihn in PowerShell aus.
# Unregister the scheduled taskUnregister-ScheduledTask -TaskName 'ExportAppLog' -Confirm:$false
Obwohl dies nicht erforderlich ist, ist es immer gut, das Ergebnis der geplanten Aufgabenlöschung zu bestätigen. Verwenden Sie den folgenden Befehl, um zu überprüfen, ob die geplante Aufgabe nicht mehr vorhanden ist.
Get-ScheduledTask -TaskName 'ExportAppLog'
Wenn die geplante Aufgabe nicht mehr existiert, sollten Sie eine Ausgabe wie die unten gezeigte erhalten.
Beachten Sie, dass die Sicherung der geplanten Aufgabe nicht nicht enthalten passwörter.
Wiederherstellen einer geplanten Aufgabe
Sie haben also die geplante Aufgabe gelöscht, und dann stellt sich heraus, dass Sie dies nicht tun sollten! Was jetzt? Diese Art von Situation lässt Sie das Konzept der Backups noch mehr schätzen.
Sie können die geplante Aufgabe mithilfe der XML-Sicherungsdatei mit PowerShell neu erstellen. Und so können Sie die Wiederherstellung durchführen.
Importieren Sie zunächst die XML-Sicherung in Ihre PowerShell-Sitzung. Der folgende Code importiert die Datei c:\temp\ExportAppLog.XML. Infolgedessen enthält die Variable $stBackup
die importierten Daten.
# Import the Schedule Task backup$stBackup = Import-Clixml -Path c:\temp\ExportAppLog.xml
Verwenden Sie als nächstes den folgenden Code, um den LogOnType
-Wert des Taskprincipals auf Interactive
zurückzusetzen. Das Zurücksetzen des LogonType-Werts ist entscheidend, um eine erfolgreiche Wiederherstellung geplanter Aufgaben sicherzustellen.
# Reset the logon type to "Run only when the user is logged on."$stBackup.Principal.LogonType = 'Interactive'
Der nächste Schritt besteht darin, ein neues geplantes Aufgabenobjekt zu erstellen. Der folgende Code erstellt eine neue geplante Aufgabe. Die Variable $restoreTask
speichert das resultierende Objekt für geplante Aufgaben.
Sie werden feststellen, dass die an die Parameter übergebenen Werte diejenigen sind, die aus dem Backup importiert wurden. Die importierten Werte befinden sich in der Variablen $restoreTask
. Die Parameter sind Action
Trigger
Settings
und Principal.
Nach dem Erstellen des Objekts für geplante Aufgaben ist es Zeit, die geplante Aufgabe zu registrieren. Verwenden Sie den folgenden Code, um die wiederhergestellte geplante Aufgabe zu registrieren.
In diesem Beispiel lautet der Taskname ‚ExportAppLog_restored.‘ Der Parameter InputObject
akzeptiert das geplante Taskobjekt in der Variablen $restoreTask
. Stellen Sie sicher, dass Sie die richtigen user
und password
Werte verwenden.
Der Code ist nun vollständig. Kopieren Sie den Code und führen Sie ihn in PowerShell aus, um die gelöschte geplante Aufgabe wiederherzustellen. Der folgende Screenshot zeigt die erwartete Ausgabe nach dem Ausführen des Codes.
Nun ist die geplante Aufgabe im System registriert. Der Screenshot unten zeigt die wiederhergestellte geplante Aufgabe.
Zusammenfassung
Die Funktion für geplante Aufgaben in Windows ist ein hervorragendes Werkzeug zum Einrichten von Aufgaben oder Jobs. Sie können die grundlegendsten bis komplexeren Aufgaben erstellen. Die Einstellungen und Optionen sind flexibel.
Mit dem Modul Geplante PowerShell-Aufgaben wird das Einrichten geplanter Aufgaben mithilfe von PowerShell-Befehlen ermöglicht. Dieses Modul bietet die Möglichkeit und die Möglichkeit, geplante Aufgaben programmgesteuert auf lokalen und Remotecomputern zu erstellen und bereitzustellen.
Microsoft hat das ScheduledTasks-Modul nicht aktualisiert, und einige erweiterte Einstellungen sind noch nicht einfach als PowerShell-Cmdlets verfügbar. Ein Beispiel ist das Erstellen eines Triggers für „On workstation“.“ Sie können diese erweiterten Einstellungen jedoch mithilfe der vorhandenen CIM-Klasse des Taskplaners vornehmen.
Dennoch ist das PowerShell-Modul für geplante Aufgaben immer noch ein hervorragendes und leistungsfähiges Tool, das Sie Ihrem PowerShell-Arsenal hinzufügen können.