Управление назначенными заданиями средствами командной строки. Часть 1

Введение

*«Планировщик заданий». Планировщик заданий версии 1.0 (присутствовал в операционной системе Windows XP и более ранних версиях) в основном предоставлялся только для нужд конечного пользователя. В современных операционных системах, таких как Windows Vista и Windows 7, функционал планировщика заданий значительно усовершенствовался. Планировщик задания является самым важным средством операционной системы, предназначенным для автоматизации рутинных операций обслуживания. Теперь планировщик заданий поддерживает модель безопасной изоляции, при помощи которой каждый набор задач, работающих в конкретном контексте безопасности, запускается в отдельных сессиях. Задачи, которые выполняются от имени разных пользователей, запускаются в отдельных сессиях – в полной изоляции друг от друга. Помимо запуска программ и сценариев, вы можете составить расписание для запуска любого средства, которое можно запустить средствами командной строки, включая утилиты командной строки, сценарии, приложения, файлы и ярлыки, а также всевозможные аргументы командной строки. При помощи триггеров, вы можете отправлять сообщение электронной почты при успешном запуске задания. При помощи приложения «Планировщик заданий» версии 2.0, вы можете даже привязать любое задание к событию, что позволит вам эффективно разрешать большинство проблем, которые могут случиться с вашей операционной системой.

Возможности утилиты schtasks.exe

Утилита командной строки SchTasks.exe позволяет выполнять те же самые операции, что и оснастка «Планировщик заданий». Эти оба средства управления назначенными заданиями взаимозаменяемы, что позволяет видеть в оснастке «Планировщик заданий» все задания, созданные при помощи утилиты командной строки SchTasks.exe и наоборот.

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

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

Дополнительные настройки

Если есть необходимость настроить дополнительные параметры запланированного задания, то щелкните правой кнопкой по созданному заданию в разделе “Библиотека планировщика заданий”, находящейся в Планировщике заданий и выберите Свойства. Если дополнительные настройки будут меняться сразу после создания задания, то в последнем окне при создании задания (рисунок 11 в предыдущей главе) нужно поставить галочку у пункта “Открыть окно Свойства для этой задачи после нажатия кнопки Готово” и нажать Готово. Любая из этих последовательность действий приведет к тому, что откроется окно, пример которого показан на рисунке 12.

Это окно содержит несколько вкладок с параметрами более тонкой настройки расписания запуска задачи. Все настройки, расположенные на них будут подробно рассмотрены ниже.На первой вкладке Задание, внешний вид которой показан на рисунке 12, находятся основные сведения о запланированной задаче. Это:

Внешний вид следующей вкладки “Триггеры” показан на рисунке 13.

Эта вкладка предоставляет все возможности по управлению расписанием запуска запланированной задачи, которые значительно шире, чем те, которые была возможность настроить в мастере создания задач и о которых шла речь в предыдущей главе. На ней есть возможность создать как новый триггер для запуска, так и отредактировать уже имеющейся старый.

Здесь можно наблюдать следующие пункты настроек:

  • Начать задачу – Условие, при котором будет начинаться задача. Данная настройка уже рассматривалась в предыдущей главе.
  • Параметры – Тип расписания запуска. Все типы были рассмотрены в предыдущей главе, поэтому останавливаться на них не будем.
  • Отложить задачу на (произвольная задержка) – Позволяет включить задержку в выполнении задачи, без изменения её раписания запуска.
  • Повторять задачу каждые … в течении … – С помощью данных настроек можно настроить повторение задачи в течении заданного интервала времени. Например, можно запускать задание каждые 30 минут в течение 8-ми часов или до определенного времени. Очень удобная возможность для решения определенных задач мониторинга событий. К примеру, иногда требуется проверять наличие в определенной папке файла с периодом в пять минут в течение рабочего дня и если он там появился, то запустить скрипт, который выполнит над файлом определенные действия.
  • Остановить задачу через – Принудительно завершает запущенный Планировщиком задач процесс. Например, в поле Выполнять до указано время 18:00. Если задание очень большое и исполняется полчаса, то запуск его в 17:55 приведет к тому, что задание фактически будет работать до 18:25. Если такое положение дел нежелательно, то нужно поставить галку Остановить задание. В этом случае выполнение задания будет прекращено в 18:00 не смотря ни на что.
  • Срок действия – Интервал дат, во время которого задача будет активна.
  • Включено – Позволяет включить или выключить данный триггер.
:/>  Сочетание клавиатуры копировать

Вкладка “Действия” показывает список задач, которые будут выполнятся при активации ранее расмотренных триггеров. Её внешний вид приведен на рисунке 15, расположенном ниже.

На данной вкладке можно задать дополнительные действия, которые будут выполятся при активации задачи – в отличии от окна создания задачи, где можно было задать только одно единственное действие. При выборе создания или изменения действия появится уже окно с уже расмотренными ранее действиями по выборе запускаемой программы, по этому перейдем к следующей вкладке “Условия”, которая показана на рисунке 16.

Здесь содержатся дополнительные условия задачи, такие как:

  • Запускать задачу при простое компьютера – Задача будет выполнятся только при “простое” компьютера, полезно для планирования запуска ресурсоемких задач, которые отнимают при своем выполнении все время процессора, загружая его на 100%.
  • Запускать только при питании для электросети – Если устройство, на котором настроена эта задача, перейдет к питанию от аккамуляторов (например это ноутбук, или сервер с подключенным ИБП), то при этой включенной опции, задача не будет выполнятся.
  • Пробуждать компьютер для выполнения задачи – При включении этой опции, Планировщик задач будет выводить компьютер из спящего режима для выполнения данной задачи.
  • Запускать только при подключении к следующей сети – При активации этого параметра, и выборе нужного сетевого подключения, задача будет выполнятся только при условии, что это подключение активно.

Вкладка “Параметры” показана на рисунке 17.

  • Немедлено запускать задачу, если пропущен плановый запуск – В случае, если задача не была выполнена вовремя, она будет выполнятся при первой же возможности (например, если в это время был выключен компьютер, то задача начнет выполнятся сразу при его включении).
  • При сбое выполнения перезапускать через – Если задача завершается с ошибкой, то можно указать времянной интервал, через который она будет повторно запущена. Так же можно задать количество повторных попыток запуска задачи.
  • Останавливать задачу, выполняемую дольше – Можно принудительно остановить выполнение задачи, если задание выполняется дольше указанного времени.
  • Принудительная остановка задачи, если она не прекращается по запросу – Если задача не останавливается, то она будет завершена принудительно.
  • Если повтор задачи не запланирован, удалять через – Позволяет настроить автоматическое удаление “одноразовой” задачи спустя какое-то время.

Ежедневный запуск задачи

Первый пример настройки показывает как настроить задачу на ежедневный запуск в 21:00. Самый простой вариант расписания, которое создается мастером без последующей донастройки. Свойства триггера созданной задачи выглядит так, как показано на рисунке 18.

Такое расписание не требует каких-то дополнительных комментариев. Задача запускается каждый день в 21:00.

Ежедневный запуск задачи до определенной даты с последующим удалением задачи из планировщика

При таком расписании задача запускается ежедневно до определенной даты. Когда дата последнего запуска достигнута задача удаляется из Планировщика.

Такое расписание запускает задачу каждый день начиная с 25-го июля и заканчивая 25-м августом, о чем говорят Дополнительные параметры, показанные на рисунке 21.

На рисунке 22 показаны настройки на вкладке “Параметры”, а именно то, что установлена галочка у пункта “Если повтор задачи не запланирован, удалять через” и выбрано значение “Немедлено”. Установка этой галки в совокупности с данным параметром приведет к тому, что задание, после последнего запуска будет удалено из Планировщика.

Ежеминутный запуск задачи в рабочее время в рабочие дни

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

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

Запуск задачи в разные дни недели в разное время

Этот пример демонстрирует настройку расписания запуска задачи Планировщиком в разные дни недели в разное время. При помощи расписания, представленного на рисунках 23 и 24 реализована следующая задача. Задание запускается в рабочие дни в 20:00, а в выходные – в 10:00. В созданном при использовании мастера создания задачи, были выставленны следующие значения, для запуска задачи по будням:

:/>  Использование DxDiag | World of Tanks Blitz

После чего был создан второй триггер, и в нем выставлены уже настройки для запуска в выходные дни:

Можно создать больше триггеров с расписаниями, чтобы более точно настроить время запуска задачи в разные дни, вплоть до создания семи триггеров для настройки расписания запуска задачи в разное время каждого дня недели.

Запуск задачи через день

Это расписание отличается от предыдущего лишь тем, что оно запускается раз в два дня.

Как видно на рисунке 19, в поле “Повторять каждые” установлено значение 2 дня. Это приведет к тому, что задача будет запущена раз в два дня. В это поле можно ввести любое значение.

Использование bat файлов для создания «заданий по расписанию»

Продолжаю тему создания нетривиальных bat-файлов для тривиальных задач, начатую

здесь

.

Наверняка многие сталкивались с задачей, когда для каких-либо целей в ОС Windows необходимо создать задание, выполняемое по расписанию (scheduled task).
Для этих целей имеется простой графический интерфейс. Однако как поступить, если задание должно создаваться автоматически?
Попробуем решить эту задачу с использованием примитивного bat-скрипта, который будет выполняться в практически любой версии Windows.

Для удобства, создадим на машине локального технологического пользователя, под которым будет работать наше задание по расписанию. Это удобно тем, что для пользователя можно задать права, которые необходимы только для выполнения определенных действий.

:: Имя локального пользователя, под которым будем работать
set user_name=test_user
:: Пароль для локального пользователя
set user_passw=test_passw

А как известно пользователь должен находиться в группе с определенными правами. Вот тут и возникает определенная сложность, т.к. если в скрипте четко задать имя группы, то могут возникнуть проблемы на машине с другой локализацией, например китайской. И как будет называться на китайском группа «Пользователи» узнать будет не очень просто. К счастью, в ОС Windows группы привязаны к так называемому Group SID. Зная, к примеру, Group SID группы «Администраторы», мы можем использовать его в скрипте. Например, S-1-5-32-545 — это локальные пользователи, а S-1-5-32-544 — администраторы.
Теперь нужно определить имя для заданного Group SID, используемого в данной локализации. Тут нам на помощь придет WMIC (WMI command-line).

:: S-1532545 – локальные пользователи
Set GroupSID=S-1532545
Set GroupName=
For /“UseBackQ Tokens=1* Delims==” %%I In (`WMIC Group Where “SID = ‘%GroupSID%'” Get Name /Value ^| Find “=”`) Do Set GroupName=%%J
Set GroupName=%GroupName:~0,-1%

Нужно знать еще один нюанс. При создании пользователя, в зависимости от системных настроек, задается время истечения пароля. И если пароль нужно будет поменять, то задание по расписанию не будет выполняться. Для этого нам нужно создать пользователя, у которого никогда не истекает пароль. Задать это в стандартной команде net user нельзя (expires:never — задает, что пользователь не может поменять пароль), поэтому опять прибегнем к помощи WMIC:

:: Создание пользователя
net user %user_name% %user_passw% /add  /comment:“User for works with application” /expires:never /fullname:%user_name% /passwordchg:no
:: Устанавливаем, чтобы пароль не истекал никогда
:: Либо так – wmic path Win32_UserAccount where Name=‘%user_name%’ set PasswordExpires=false
wmic USERACCOUNT where Name=‘%user_name%’ set PasswordExpires=false
:: Добавление локального пользователя в заданную локальную группу
net localgroup %GroupName% %user_name% /ADD

Обратите внимание, что если вы удаляете пользователя командой net user test_user /DELETE, то вам нужно будет вручную удалить его каталог по пути %USERS%test_user либо предусмотреть его удаление в скрипте.

Ну а далее создаем само задание, выполняемое по расписанию:

:: Имя запланированного задания, под которым будет работать приложение
set task_name=Test_task_bat
:: Путь к приложению
set my_app_path=“d:test.bat”
:: Интервал работы приложения во временном задании
::  Valid schedule types: MINUTE, HOURLY, DAILY, WEEKLY, MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE.
:: ЕЖЕМИНУТНО, ЕЖЕЧАСНО, ЕЖЕДНЕВНО, ЕЖЕНЕДЕЛЬНО, ЕЖЕМЕСЯЧНО ПРИ ЗАПУСКЕ ВХОДЕ В СИСТЕМУ ПРИ ПРОСТОЕ
set schtasks_time=MINUTE
:: Начальное время старта приложения во временном задании
set schtasks_start=08:00:00
:: Создание запланированного задания
schtasks /create /tn “%task_name%” /tr %my_app_path% /sc %schtasks_time% /st %schtasks_start% /ru %user_name% /rp %user_passw%

Вот и все. Надеюсь, что мой небольшой мануал окажется полезен и вы сэкономите свое время при выполнении данной задачи.

P.S.
Предвижу подобные вопросы и комментарии: есть же более удобные инструменты, почему именно bat?
Just for fun!

Отложенный ежедневный запуск задачи

В этом примере запланирован ежедневный запуск задачи, но первый ее запуск отложен на 5 дней.

Как видно, на рисунке 20 в Дополнительных настройках установлена дата начала работы задания на 30-е число, притом, что задание создано 25-го. Таким образом, мы создали задачу, но отложили начало ее ежедневного запуска на 10 дней.

:/>  Как отключить акселерацию мыши (noforcemaccel)

Отображение назначенных заданий. команда schtasks /query

Используя команду Schtasks /query, вы можете просмотреть список назначенных заданий на локальном или удаленном компьютере. Синтаксис команды очень простой и удобный:

SchTasks /Query [/S Компьютер /U /P] [Дополнительные параметры]

Доступны следующие параметры:

Примеры настройки планировщика

В данной главе будет показано несколько вариантов расписаний настроенной задачи. Все расписания запускают файл test.bat из C:Scheduler. Задача была сперва создана при помощи мастера, а затем в окне Планировщика открыты её свойства.

Средства управления заданиями

Как говорилось выше, «Планировщик заданий» поддерживает модель изоляции, что позволяет каждому набору задач, работающих в конкретном контексте безопасности запускаться в отдельной сессии. Механизм планировщика задач запускает переходные процессы для выполнения процессов учетных записей пользователя или компьютера для запуска триггера.

Триггер – это набор условий, при выполнении которых запускается задание. Триггеры, основанные на времени, запускают задание однократно в определенное время суток либо ежедневно, еженедельно или ежемесячно. Триггеры, основанные на событиях, запускают задание при возникновении определенных системных событий. Задачи могут быть запущены от таких учетных записей компьютера, как LocalSystem, LocalService или NetworkService.

Задачи могут быть запущены как локально, так и удаленно. Каждая задача может содержать несколько одновременно выполняемых действий. Несколько задач могут выполняться как параллельно, так и последовательно(одна за другой), используя синхронизацию с указанной службой или событием.

Каждое действие планировщика заданий записывается в журналы «Система» и «Журналы приложений и службMicrosoftWindowsTaskScheduler». Для работы, «Планировщик заданий» использует несколько компонентов, которые предназначены для предоставления пользовательского интерфейса, механизма выполнения заданий, отслеживания и управления событиями, а именно:

Тестовый запуск задачи

Мало создать задание и написать программу или скрипт, которые будут запускаться Планировщиком. Нужно обязательно выполнить тестовый запуск задачи, чтобы убедиться, что задача работает именно так, как планировалось и при ее запуске не возникает проблем. Сделать это достаточно просто.

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

При удачном прохождении тестового запуска задачи, в главном окне Планировщика, в столбце “Результат прошлого запуска” появится значение 0х0. Это говорит о том, что запуск задачи был успешным. Если запуск задачи по каким-то причинам не удался, то в столбце “Результат прошлого запуска” будет стоять другое значение – 0x1.

После этого, можно повторно запустить задачу, и уже по журналу смотреть, в чем же произошло.

Успешные тестовые запуски задачи не отменяют необходимости постоянного контроля за выполнением задачи. Введя в «боевую» эксплуатацию задание не забывайте периодически просматривать журнал и Планировщик. Более разумное решение – создавать лог-файл работы самой задачи и по завершении ее работы открывать этот лог.

К примеру, приходя утром на работу Вы будете видеть открытое окно редактора с лог-файлом. Это вынудит невольно просмотреть результат выполнения задачи, а отсутствие открытого окна будет означать проблемы, возникшие либо при запуске задачи, либо в ходе ее выполнения. Это позволит оперативно исправить проблему.

Управление заданиями планировщика задач по сети

Нередко возникает необходимость выполнять автоматически те или иные действия на компьютерах пользователей в локальной сети. Администратор может управлять заданиями Планировщика на компьютерах пользователей удаленно, по сети. Учетная запись, из-под которой будет производится управление заданиями Планировщика должна обладать правами Администратора на компьютере пользователя.

Чтобы создать, изменить или удалить задание на компьютере пользователя по сети, откройте “Планировщик задач”, и в левом столбце нажмите правой кнопкой мыши на “Планировщик заданий (Локальный компьютер)”. В появившемся контекстном меню нужно выбрать пункт “Подключится к другому компьютеру…”.

После этого, следует ввести имя компьютера, к которому будет выполнятся подключение. Если для подключения к другому компьютеру нужно использовать данные пользователя, отличающиеся от локального, необходимо установить галочку на пункте “Подключиться как другой пользователь”.

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

Оставьте комментарий