Vor Windows 10 war es einfach, eine Aufgabe den ein Benutzer angelegt hat, durch einen anderen Benutzer ausführen zu lassen, es genügte die Sicherheitsberechtigungen auf Dateisystemebene anzupassen. Seit Windows 10 ist das leider nicht mehr ganz so einfach.

Bevor Microsoft das Thema Berechtigungen für Aufgaben geändert hat, konnte man einfach einen oder weitere Benutzer durch die Anpassung der Zugriffsrechte der jeweiligen Aufgabendatei unter

C:\Windows\System32\Tasks

das Ausführen ermöglichen. Ab Windows 10 sind die Berechtigungen für die Aufgabenplanung in die Registry unter

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree

gewandert und nicht mehr so einfach anpassbar. Neben dem neuen Ort machen es einem die Redmonder zudem unnötig schwer, da es kein Tool, keine GUI oder einen Befehl zum Anpassen der Berechtigungen gibt.

Anwendungsfall

Häufig kommt es vor, das man eine Aufgabe, die in einem bestimmten Benutzerkontext (z.B. als Admin oder als System) ausgeführt und für Benutzer die keine administrativen Rechte haben startbar sein soll.

Konfiguriert nun der Administrator eine Aufgabe, wird diese nicht dem gewöhnlichen (nicht-administrativen) Benutzer angezeigt. Umgekehrt ist das wiederum schon der Fall! Genau dieses Verhalten lässt sich dazu nutzen, um zumindest für einen bestimmten Benutzer eine spezifische Aufgabe anzulegen:

  • Als Benutzer die Aufgabenplanung öffnen und eine neue Aufgabe (soweit möglich) anlegen.
  • Als Administrator die Aufgabenplanung öffnen und die zuvor vom Benutzer angelegte Aufgabe bearbeiten. Nun z.B. den Benutzerkontext (Admin, System …) eintragen und ggf. weitere Einstellungen vornehmen.

Die so erstellte und bearbeitete Aufgabe bleibt für den Benutzer im Zugriff und kann ausgeführt werden.

Berechtigungen für Aufgabe(n) ändern

Wie eingangs erwähnt befinden sich die Berechtigungen in der Registry, seitens Microsoft gibt es dazu nicht wirklich viel Info außer

Microsoft – Docs – Security Contexts for Tasks

Findige Kollegen haben allerdings durch Ausprobieren einiges herausgefunden. Der vermutlich wichtigste Beitrag hierzu stammt von Michael Albert:

Michls Tech Blog – Windows: Permit a limited user to run a schedule task defined by an Administrator

Man beachte dort zudem das Kommentar von “grubi” vom 31.03.2020. Das sehr überschaubare PowerShell-Skript aus dem Kommentar sieht so aus:

$scheduler = New-Object -ComObject "Schedule.Service"
$scheduler.Connect()
$task = $scheduler.GetFolder("").GetTask("<TASKNAME>")
$sec = $task.GetSecurityDescriptor(0xF)
$sec = $sec + ‘(A;;GRGX;;;AU)’
$task.SetSecurityDescriptor($sec, 0)

Man ersetzt “<TASKNAME>” durch die Bezeichnung der Aufgabe und führt das Skript aus. Zu beachten ist, das dieses Skript nur auf Aufgaben angewendet werden kann, die vom gleichen Benutzer erstellt wurden, der nun das PowerShell-Skript ausführt!

Ein weiteres Skript findet man im TechNet Forum unter

Scheduled Task that Any User can run

in der Antwort von “MotoX80” vom 27.08.2019 bzw. in einfacher Lesbar unter

GitHub – withakay/UnlockScheduledTask.ps1

Dieses Skript kann im Gegensatz zum vorigen auch Aufgaben die durch andere Benutzer erstellt wurden ändern. Der Name der Aufgabe wird mittels Parameter übergeben:

 .\UnlockScheduledTask.ps1 -taskname "<TASKNAME>"

Ggf. muss man vorher noch

Set-ExecutionPolicy -ExecutionPolicy bypass

ausführen. Für alle Befehle werden erhöhte Rechte benötigt!

Beide hier gezeigten Skripte haben gemein, das sie Aufgaben so berechtigen, das alle Benutzer sie sehen und ausführen können.