Как передать аргумент запланированной задаче?

Как передать аргумент запланированной задаче?

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

решение1

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

Поскольку вы разъяснили и подтвердили следующее:

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

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

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

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

введите описание изображения здесь


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

Связанный контент