
В планировщике задач у меня есть задача, использующая учетную запись SYSTEM, которая запускает пакетный файл. У пользователя (не администратора) есть другой пакетный файл, который запускает задачу. Как пакет пользователя может задать переменную, которая может использоваться пакетом задачи?
решение1
Динамически задайте значение переменной в пакетном скрипте, который будет выполнен планировщиком задач.
Поскольку вы разъяснили и подтвердили следующее:
- Вам необходимо значение переменной в пакетном скрипте, котороеДиспетчер задачвыполняется как
SYSTEM
должно быть установлено как значение, соответствующее SID пользователя, который запускает сценарий входа- Вы можете использовать локальный путь к файлу на каждом компьютере для расположения скрипта.Диспетчер задачбудет выполнять
- У вас никогда не будет более одного пользователя, одновременно входящего в одну и ту же ОС, который будет выполнять этот скрипт.
Я описал это решение как отдельный ответ с более подробным описанием предлагаемого подхода.
Вам необходимо убедиться в следующем:
- Подтвердите коррелированную Запланированная задачаимя настраивается на каждой машине, которая будет локально выполнять пакетный скрипт
- Подтвердите, что каждый коррелированныйЗапланированная задачана каждой машине, где все выполняется,
schtasks
указывают на один и тот же стандартный путь к пакетному скрипту и имя файла.
Пример пакетного скрипта [Вход]
Я повторно использовал логику, которую вы уже настроили для этого, но добавил несколько дополнительных переменных и условных операторов.ЕСЛИлогика, которая создаст локальную папку на локальном компьютере, в которой будет находиться пакетный скрипт, если она еще не существует, иудалитьпакетный файл в этой папке, если он уже существует, так как он создается для каждого запуска.
По сути, это создаст динамический пакетный скрипт каждый раз, когда он выполняется (при входе в систему). Пакетный скрипт, который он создает, будет содержать логику Reg Add
и команды со значениями части SID, соответствующими пользователю, для которого был запущен скрипт входа в систему при входе в систему. Поэтому, когдаДиспетчер задачвыполняет скрипт, это гарантирует, что скрипт всегда будет иметь необходимую добавленную стоимость для каждого входа в систему/выполнения скрипта.
@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"
Запланированная задача
Вам нужно будет только убедиться, что задача, которую вы указываете schtasks
для выполнения (т. е. "My Profile Changer"
), указывает на тот же полный путь, который вы указали в пакетном скрипте входа для значений переменных SET LocalDir=
и SET TaskScript=
.
Итак, если переменные сценария входа равны C:\localfolder\TaskScript.cmd
, то это то же самое значение, на которое вы хотите, Program/Script
чтобы указывало поле. Я бы также предложил поместить SET LocalDir=
значение переменной в Start in (optional):
поле, но вам НЕ нужно будет добавлять никаких аргументов, поэтому оставьте Add Arguments (optional):
поле пустым или пустым, без чего-либо в нем (снимок экрана ниже).