
Im Taskplaner habe ich eine Aufgabe mit dem SYSTEM-Konto, die eine Batchdatei ausführt. Der Benutzer (kein Administrator) hat eine andere Batchdatei, die die Aufgabe ausführt. Wie kann die Batchdatei des Benutzers eine Variable festlegen, die von der Batchdatei der Aufgabe verwendet werden kann?
Antwort1
Dynamisches Festlegen eines Variablenwerts in einem Batch-Skript, das vom Taskplaner ausgeführt wird
Da Du folgendes klargestellt und bestätigt hast:
- Sie benötigen den Variablenwert im Batch-Skript, den dieAufgabenplanungwird als
SYSTEM
ein Wert ausgeführt, der mit der SID des Benutzers übereinstimmt, der das Anmeldeskript ausführt- Sie können den lokalen Dateipfad pro Computer für den Skriptspeicherort verwenden.Aufgabenplanungwird ausführen
- Es wird nie mehr als einen Benutzer gleichzeitig geben, der sich beim gleichen Betriebssystem anmeldet und dieses Skript ausführt.
Ich habe diese Lösung als separate Antwort mit ausführlicheren Einzelheiten zum vorgeschlagenen Ansatz niedergeschrieben.
Sie sollten Folgendes sicherstellen:
- Bestätigen Sie die korrelierten Geplante AufgabeDer Name wird auf jedem Computer eingerichtet, der das Batch-Skript lokal ausführt.
- Bestätigen Sie, dass jedes korrelierteGeplante Aufgabeauf jeder Maschine, die ausgeführt wird,
schtasks
verweisen alle auf denselben Standardpfad und Dateinamen für Batchskripte.
Batch [Login] Skriptbeispiel
Ich habe die Logik, die Sie bereits eingerichtet haben, wiederverwendet, aber ich habe ein paar zusätzliche Variablen und bedingteWENNLogik, die den lokalen Ordner auf dem lokalen Rechner so einrichtet, dass das Batch-Skript dort abgelegt wird, falls es noch nicht existiert, undlöschendie Batchdatei in diesem Ordner, falls sie bereits vorhanden ist, da sie bei jedem Lauf erstellt wird.
Im Wesentlichen wird dadurch bei jeder Ausführung (beim Login) ein dynamisches Batch-Skript erstellt. Das erstellte Batch-Skript enthält die Reg Add
Logik und Befehle, wobei die SID-Teilwerte denen des Benutzers entsprechen, für den das Login-Skript bei der Anmeldung ausgeführt wurde. Wenn also derAufgabenplanungführt das Skript aus. Dadurch wird sichergestellt, dass das Skript immer den erforderlichen Mehrwert pro Anmeldung/Skriptausführung aufweist.
@ECHO ON
SET LocalDir=C:\localfolder
SET TaskScript=TaskScript.cmd
IF NOT EXIST "%LocalDir%" MD "%LocalDir%"
IF EXIST "%LocalDir%\%TaskScript%" DEL /Q /F "%LocalDir%\%TaskScript%"
for /f "tokens=2" %%i in ('whoami /user /fo table /nh') do set usersid=%%i
ECHO reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%usersid%" /v "State" /t REG_DWORD /d 128 /f>>"%LocalDir%\%TaskScript%"
schtasks /run /tn "My Profile Changer"
Geplante Aufgabe
Sie müssen nur sicherstellen, dass die Aufgabe, die Sie schtasks
ausführen lassen (also "My Profile Changer"
), auf denselben vollständigen Pfad verweist, den Sie im Batch-Anmeldeskript für die SET LocalDir=
und SET TaskScript=
die Variablenwerte angeben.
Wenn also die Variablen des Login-Skripts gleich sind, C:\localfolder\TaskScript.cmd
dann ist dies derselbe Wert, Program/Script
auf den das Feld zeigen soll. Ich würde auch vorschlagen, den SET LocalDir=
Variablenwert in das Start in (optional):
Feld einzugeben, aber Sie müssen KEINE Argumente hinzufügen, also lassen Sie das Add Arguments (optional):
Feld leer oder leer, ohne etwas darin (unten Screenshot).