В планировщике задач у меня есть задача с использованием учетной записи SYSTEM, которая запускает пакетный файл. Пользователь (не администратор) имеет другой пакетный файл, который запускает задачу. Как пакет пользователя может установить переменную, которая может использоваться пакетом задачи?
1 ответ
Динамически установить значение переменной в пакетном скрипте, который будет выполняться планировщиком задач
Поскольку вы уточнили и подтвердили следующее:
- Вам нужно значение переменной в пакетном сценарии, который планировщик задач выполняет как
SYSTEM
чтобы установить его в качестве значения, соответствующего SID пользователя, который запускает сценарий входа в систему- Вы можете использовать локальный путь к файлу для каждой машины для местоположения скрипта, который будет выполнять планировщик задач
- У вас никогда не будет одновременно нескольких пользователей, подписывающих одну и ту же ОС, которые будут выполнять этот скрипт
Я написал это решение как отдельный ответ с более подробным описанием предложенного подхода.
Вы хотите убедиться в следующем:
- Убедитесь, что коррелированное имя запланированной задачи установлено на каждом компьютере, который будет выполнять пакетный сценарий локально
- Убедитесь, что каждая коррелированная запланированная задача на каждом компьютере, выполняемом с помощью
schtasks
все указывают на один и тот же путь стандартного пакетного сценария и имя файла.
Batch [Login] Пример скрипта
Я повторно использовал логику, которую вы уже настроили для этого, но я добавил несколько дополнительных переменных и условную логику IF , которая сделает локальную папку на локальной машине сценарием пакета, если он еще не существует, и удалил файл пакета в этом папка, если она уже существует, так как она создается за цикл.
По сути, это будет создавать динамический пакетный скрипт при каждом его выполнении (при входе в систему). Пакетный сценарий, который он создает, будет содержать логику и команды 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=
variable в поле Start in (optional):
но вам не нужно добавлять какие-либо аргументы, поэтому оставьте поле Add Arguments (optional):
пустым или пустым, в котором ничего нет (снимок экрана ниже)).