1

В планировщике задач у меня есть задача с использованием учетной записи SYSTEM, которая запускает пакетный файл. Пользователь (не администратор) имеет другой пакетный файл, который запускает задачу. Как пакет пользователя может установить переменную, которая может использоваться пакетом задачи?

1 ответ1

1

Динамически установить значение переменной в пакетном скрипте, который будет выполняться планировщиком задач

Поскольку вы уточнили и подтвердили следующее:

  1. Вам нужно значение переменной в пакетном сценарии, который планировщик задач выполняет как SYSTEM чтобы установить его в качестве значения, соответствующего SID пользователя, который запускает сценарий входа в систему
  2. Вы можете использовать локальный путь к файлу для каждой машины для местоположения скрипта, который будет выполнять планировщик задач
  3. У вас никогда не будет одновременно нескольких пользователей, подписывающих одну и ту же ОС, которые будут выполнять этот скрипт

Я написал это решение как отдельный ответ с более подробным описанием предложенного подхода.

Вы хотите убедиться в следующем:

  • Убедитесь, что коррелированное имя запланированной задачи установлено на каждом компьютере, который будет выполнять пакетный сценарий локально
  • Убедитесь, что каждая коррелированная запланированная задача на каждом компьютере, выполняемом с помощью 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): пустым или пустым, в котором ничего нет (снимок экрана ниже)).


Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .