Вопрос или проблема
Я пытаюсь создать запланированное задание с использованием командной строки, которое имеет несколько действий, выполняющих более одного пакетного файла последовательно, среди прочего.
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, так как он позволяет вам работать с объектами и конструкциями более гибко и удобно.