schtasks с несколькими действиями

Вопрос или проблема

Я пытаюсь создать запланированное задание с использованием командной строки, которое имеет несколько действий, выполняющих более одного пакетного файла последовательно, среди прочего.

SCHTASKS /Create /TN TaskName /SC ONLOGON 
/TR C:\ost\sanAuto.bat
/TR C:\ost\ClEvtLog.cmd

То, что я пробовал и не сработало:

SCHTASKS /Create /TN tsk /SC ONLOGON /TR "C:\sanAuto.bat","C:\ClEvtLog.cmd"

Этот вариант создает одно действие для запуска программы как “C:\sanAuto.bat”,”C:\ClEvtLog.cmd”.

SCHTASKS /Create /TN tsk /SC ONLOGON /TR "C:\sanAuto.bat" /TN "C:\ClEvtLog.cmd"

Этот вариант говорит, что несколько /TN не разрешены.

Есть ли способ создать задания из командной строки и указать несколько действий?

Примечание 1
Экспорт и импорт XML – это не то, что я хочу делать
http://iislogs.com/steveschofield/2009/03/20/creating-a-scheduled-task-with-multiple-actions-using-command-line-in-windows-server-2008/

SchTasks не позволяет вам определять несколько действий с помощью переключателя TR. Чтобы определить несколько действий, вам нужно описать ваше задание в XML-файле, а затем использовать переключатель XML для импорта настроек.

Из schtasks /create /?:

/XML  xmlfile      Создает задание из указанного в файле XML задания.
                   Может комбинироваться с переключателями /RU и /RP, или с /RP
                   отдельно, когда XML задания уже содержит принципала.

Самый простой способ описать задание в XML – это использовать графический интерфейс Планировщика заданий Windows для создания вашего задания (с определенными несколькими действиями), а затем “Экспортировать” его в XML.

Графический интерфейс Планировщика заданий

Вы можете легко сделать это через PowerShell:

Import-Module ScheduledTasks #модуль для управления запланированными заданиями
$t=Get-ScheduledTask -TaskName 'MyTaskName' #получить объект задания
$tr=New-ScheduledTaskTrigger -Daily -At 4:30am  #создать дополнительный триггер
$t.Triggers=@($t.Triggers[0], $tr) #добавить его к триггерам задания
$t|Set-ScheduledTask #сохранить задание

Если вы хотите это в виде однострочной команды CMD:

PowerShell -Command "Import-Module ScheduledTasks;$t=Get-ScheduledTask -TaskName 'MyTaskName';$tr=New-ScheduledTaskTrigger -Daily -At 4:30am;$t.Triggers=@($t.Triggers[0], $tr);$t|Set-ScheduledTask;exit $$($Error.Count)"

Ответ или решение

К сожалению, команда SCHTASKS не позволяет указывать несколько действий с помощью параметра /TR. Однако вы можете создать задачу с несколькими действиями, используя XML-файлы или PowerShell.

Установка задания с несколькими действиями с помощью XML

Если вы предпочитаете вариант с XML, вам нужно будет сначала создать задачу с несколькими действиями через графический интерфейс Task Scheduler, а затем экспортировать её в XML-файл. После этого вы можете импортировать этот файл с помощью команды SCHTASKS.

Пример команды для импорта задания из XML:

SCHTASKS /CREATE /XML "C:\path\to\your\task.xml"

Пример создания XML-файла

XML-файл для задания с несколькими действиями может выглядеть так:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2023-10-01T10:00:00</Date>
    <Author>ВашеИмя</Author>
  </RegistrationInfo>
  <Triggers>
    <LogonTrigger>
      <UserId>*</UserId>
      <LogonType>InteractiveToken</LogonType>
    </LogonTrigger>
  </Triggers>
  <Actions>
    <Exec>
      <Command>C:\ost\sanAuto.bat</Command>
    </Exec>
    <Exec>
      <Command>C:\ost\ClEvtLog.cmd</Command>
    </Exec>
  </Actions>
</Task>

Сохраните этот XML в файл, например, task.xml, и затем используйте команду выше, чтобы создать задание.

Создание задачи с помощью PowerShell

Если вы хотите воспользоваться PowerShell, вы можете создать задачу с несколькими действиями с помощью следующего кода:

# Импортируем модуль для работы с запланированными задачами
Import-Module ScheduledTasks 

# Создаём новую задачу
$action1 = New-ScheduledTaskAction -Execute "C:\ost\sanAuto.bat"
$action2 = New-ScheduledTaskAction -Execute "C:\ost\ClEvtLog.cmd"
$trigger = New-ScheduledTaskTrigger -AtLogOn

# Создаем задачу с несколькими действиями
$task = New-ScheduledTask -Action $action1, $action2 -Trigger $trigger

# Регистрируем задачу
Register-ScheduledTask -TaskName "MyMultiActionTask" -InputObject $task

Однострочная команда PowerShell

Если вам нужно выполнить это в одной строке через CMD:

PowerShell -Command "Import-Module ScheduledTasks; $action1 = New-ScheduledTaskAction -Execute 'C:\ost\sanAuto.bat'; $action2 = New-ScheduledTaskAction -Execute 'C:\ost\ClEvtLog.cmd'; $trigger = New-ScheduledTaskTrigger -AtLogOn; $task = New-ScheduledTask -Action $action1, $action2 -Trigger $trigger; Register-ScheduledTask -TaskName 'MyMultiActionTask' -InputObject $task; exit $$($Error.Count)"

Заключение

К сожалению, из командной строки с помощью SCHTASKS вы не сможете создать задачу с несколькими действиями напрямую. Использование XML-файлов или PowerShell — это наилучшие доступные варианты. Наиболее удобный способ — это использовать PowerShell, так как он позволяет вам работать с объектами и конструкциями более гибко и удобно.

Оцените материал
Добавить комментарий

Капча загружается...