Automatisieren von PowerShell-Skripten mit dem Taskplaner

Microsoft Windows Task Scheduler kann Ihnen helfen, ein Programm oder PowerShell-Skript zu einem bestimmten Zeitpunkt oder bei Erfüllung bestimmter Bedingungen automatisch zu starten. Sie können auch den Versand von E-Mails und sogar die Anzeige bestimmter Nachrichten planen. In diesem Blog zeigen wir Ihnen, wie Sie ein PowerShell-Skript über den Taskplaner ausführen, das Sie bei jeder Softwareinstallation auf einem lokalen Computer benachrichtigt.

Wir werden auch geplante Aufgaben mit PowerShell-Skripten erstellen. Sie lernen, wie Sie:

  • Tasks mit dem Taskplaner erstellen
  • geplante Tasks ändern oder löschen
  • geplante Tasks mit PowerShell-Skripten erstellen.

Tasks mit dem Taskplaner erstellen

Öffnen Sie den Taskplaner, indem Sie die Tastenkombination „Windows+R“ drücken und dann „taskschd.msc“ in das sich öffnende Fenster eingeben. Führen Sie dann die folgenden Schritte aus:

1. Klicken Sie auf „Aufgabe erstellen“ und geben Sie einen Namen und eine Beschreibung für die neue Aufgabe ein. Um das Programm mit Administratorrechten auszuführen, aktivieren Sie das Kontrollkästchen „Mit den höchsten Rechten ausführen“. In unserem Beispiel weisen wir der Aufgabe ein Dienstkonto zu und führen sie unabhängig davon aus, ob der Benutzer angemeldet ist.

2. Wechseln Sie zur Registerkarte „Auslöser“ und klicken Sie auf die Schaltfläche „Neu…“. Hier können Sie die Bedingungen angeben, unter denen die Aufgabe ausgeführt werden soll. Sie können sie zum Beispiel nach einem Zeitplan, bei der Anmeldung, im Leerlauf, beim Start oder bei einem bestimmten Ereignis ausführen lassen. Wir möchten, dass unsere Aufgabe bei jeder neuen Software-Installation ausgelöst wird, also wählen wir „Bei einem Ereignis“ aus dem Dropdown-Menü und wählen „Anwendung“ aus den Protokolleinstellungen. Lassen Sie den Parameter „Quelle“ leer und setzen Sie die Ereignis-ID auf „11707“. Klicken Sie auf „OK“, um die Änderungen zu speichern.

3. Navigieren Sie zur Registerkarte „Aktionen“ und klicken Sie auf „Neu…“. Hier können Sie die Aktionen angeben, die ausgeführt werden sollen, wenn die Auslösebedingungen erfüllt sind. Sie können zum Beispiel eine E-Mail senden oder eine Nachricht anzeigen. In unserem Fall wollen wir ein Programm starten, also müssen wir das PowerShell-Skript erstellen, das wir ausführen wollen, und es mit der Erweiterung „ps1“ speichern. Sie finden das Skript hier; es wird eine Benachrichtigung mit den Ereignisdetails über die installierte Software senden.

Um das PowerShell-Skript zu planen, geben Sie die folgenden Parameter an:

  • Aktion: Start a program
  • Program\script: powershell
  • Add arguments (optional): -File

Klicken Sie auf „OK“, um Ihre Änderungen zu speichern.

4. Auf der Registerkarte „Conditions“ können Sie die Bedingungen angeben, die zusammen mit dem Auslöser bestimmen, ob die Aufgabe ausgeführt werden soll. In unserem Fall sollten wir die Standardeinstellungen auf dieser Registerkarte belassen.

5. Auf der Registerkarte „Einstellungen“ können Sie auch zusätzliche Parameter für Ihre geplante Aufgabe festlegen. Für unser Beispiel lassen wir sie jedoch unverändert.

6. Wenn die Aufgabe vollständig eingerichtet ist, werden Sie vom System nach dem Passwort für das Dienstkonto gefragt. Beachten Sie, dass dieses Konto über das Recht „Als Stapelverarbeitungsauftrag anmelden“ verfügen muss. Geben Sie das Kennwort ein und klicken Sie auf „OK“, um die Aufgabe zu speichern.
7. Damit der Aufgabenplaner ordnungsgemäß funktioniert, muss der Dienst „Job Scheduler“ so eingestellt sein, dass er „Dienste.msc“ ausführt. Suchen Sie in der Liste der Dienste den Taskplaner und doppelklicken Sie auf ihn. Setzen Sie auf der Registerkarte „Allgemein“ den Starttyp auf „Automatisch“ und klicken Sie auf „OK“, um die Änderung zu speichern.

Wenn nun neue Software auf Ihrem Microsoft Windows Server installiert wird, werden Sie per E-Mail benachrichtigt, in der der Zeitpunkt der Installation, der Name der Software und die Benutzer-ID (SID) der Person, die sie installiert hat, angegeben sind.

Geplante Aufgaben ändern oder löschen

Um eine vorhandene Aufgabe zu ändern, klicken Sie mit der rechten Maustaste auf sie in der Liste, wählen Sie „Eigenschaften“, bearbeiten Sie die erforderlichen Einstellungen und klicken Sie auf „OK“. Um eine geplante Aufgabe zu löschen, klicken Sie mit der rechten Maustaste darauf, wählen Sie Löschen und bestätigen Sie die Aktion.

Erstellen geplanter Aufgaben mit PowerShell-Skripten

Nachdem Sie nun wissen, wie Sie eine Aufgabe mit dem Aufgabenplaner erstellen können, wollen wir nun herausfinden, wie Sie eine geplante Aufgabe mit PowerShell erstellen. Angenommen, unsere Aufgabe soll täglich um 10 Uhr morgens gestartet werden und das PowerShell-Skript ausführen, das Sie hier finden, um Änderungen an der Gruppenmitgliedschaft in der Active Directory-Site zu überwachen.

In Windows Powershell 2.0 (Windows 7, Windows Server 2008 R2) müssen Sie zum Erstellen eines geplanten Auftrags das TaskScheduler-Modul verwenden. Installieren Sie das Modul, indem Sie den Befehl „Import-Module TaskScheduler“ ausführen, und verwenden Sie das folgende Skript, um eine Aufgabe zu erstellen, die das PowerShell-Skript mit dem Namen GroupMembershipChanges.ps1 täglich um 10 Uhr ausführt:

Import-Module TaskScheduler $task = New-Task$task.Settings.Hidden = $trueAdd-TaskAction -Task $task -Path C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe –Arguments "-File C:\Scripts\GroupMembershipChanges.ps1"Add-TaskTrigger -Task $task -Daily -At "10:00"Register-ScheduledJob –Name "Monitor Group Management" -Task $task

Windows PowerShell 4.0 (Windows Server 2012 R2 und höher) enthält das TaskScheduler-Modul nicht, sodass dieses Skript nicht funktioniert. Stattdessen wurden in PowerShell 3.0 und 4.0 neue Cmdlets zum Erstellen von geplanten Aufgaben eingeführt, New-ScheduledTaskTrigger und Register-ScheduledTask, die das Erstellen einer geplanten Aufgabe viel einfacher und bequemer machen. Lassen Sie uns also eine Aufgabe erstellen, die unser Skript täglich um 10 Uhr morgens unter Verwendung des Systemkontos (SYSTEM) ausführt. Diese Aufgabe wird von einem Konto mit erhöhten Rechten ausgeführt.

$Trigger= New-ScheduledTaskTrigger -At 10:00am –Daily # Specify the trigger settings$User= "NT AUTHORITY\SYSTEM" # Specify the account to run the script$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\PS\StartupScript.ps1" # Specify what program to run and with its parametersRegister-ScheduledTask -TaskName "MonitorGroupMembership" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force # Specify the name of the task

Weitere Auslöseroptionen, die bei der Erstellung neuer Aufgaben nützlich sein können, sind:

  • -AtStartup – Löst Ihre Aufgabe beim Start von Windows aus.
  • -AtLogon – Löst Ihre Aufgabe aus, wenn sich der Benutzer anmeldet.
  • -Once – Löst Ihre Aufgabe einmal aus. Sie können ein Wiederholungsintervall mit dem Parameter -RepetitionInterval festlegen.
  • -Weekly – Löst Ihre Aufgabe einmal pro Woche aus.

Beachten Sie, dass es mit diesen Cmdlets nicht möglich ist, die Ausführung „bei einem Ereignis“ auszulösen, wie wir es mit dem Taskplaner-Tool getan haben. PowerShell-Skripte mit Auslösern „bei einem Ereignis“ sind viel komplizierter, so dass dies ein echter Nachteil der Verwendung von PowerShell gegenüber Task Scheduler ist.

Abschluss

Wie Sie sehen, ist es einfach, geplante Aufgaben mit Task Scheduler oder PowerShell zu erstellen. Denken Sie jedoch daran, dass unsachgemäße Änderungen an Ihren geplanten Aufgaben zu Dienstunterbrechungen führen und die Serverleistung beeinträchtigen können. Daher ist es wichtig, dass Sie alle Änderungen an Ihren geplanten Aufgaben verfolgen.

Jeff ist Director of Global Solutions Engineering bei Netwrix. Er ist ein langjähriger Netwrix-Blogger, Sprecher und Vortragender. Im Netwrix-Blog teilt Jeff Lifehacks, Tipps und Tricks, die Ihre Systemadministration erheblich verbessern können.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.