Роб Грейвилл – основатель сайта GravelleConsulting.com, создает системы для коммерческих и правительственных организаций Канады

Планировщик задач Windows — широко известный служебный инструмент пользовательского интерфейса для автоматизации повторяющихся задач. Не все знают, что возможности планировщика задач шире, чем подготовка расписания для запуска сценариев, программ и документов в определенное время. С помощью данного инструмента можно отображать окна сообщений и отправлять сообщения по электронной почте. Кроме того, можно назначить график запуска задач в зависимости от некоторых триггеров событий, в том числе запуска компьютера, регистрации в системе и даже пользовательских событий. В данной статье я расскажу об этих триггерах событий и объясню, как эффективно использовать многими недооцениваемый планировщик задач.

Времена изменились

Было время, когда планировщик задач считался примитивным и непригодным для настройки, в сравнении с демоном-планировщиком задач cron в операционных системах Unix и Linux. Современный планировщик задач отличается гибкостью настроек и широкими возможностями. Поэтому прежде чем обращаться к сторонним утилитам, выясните, нет ли нужных функций в планировщике задач.

В предлагаемой статье рассматривается операционная система Windows Server 2008. В других операционных системах, в частности Windows 7, могут быть небольшие отличия, однако планировщик задач функционирует в основном так, как описано здесь.

Основы планировщика задач

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

Для запуска планировщика задач требуются административные полномочия. Можно использовать панель управления, команду Manage или taskschd.msc. На экране 1 показан вид планировщика задач после первого запуска.

Планировщик задач
Экран 1. Планировщик задач

Создание новой задачи

Существует три способа подготовить новую задачу:

* создать простую задачу;

* создать более сложную задачу;

* импортировать задачу.

Пункт меню Create Basic Task подойдет для задач, не требующих сложных настроек, например ограничений времени задач или числа повторений. Запланировать запуск Microsoft Outlook при старте компьютера можно следующим образом.

  1. Нажмите кнопку Action на панели меню, а затем щелкните Create Basic Task.
  2. Введите имя задачи (в данном примере Launch Outlook) и необязательное описание, а затем нажмите кнопку Next.
  3. Задачу можно выполнять

* на календарной основе (каждый день, неделю, месяц или только один раз);

* при типовых повторяющихся событиях, таких как запуск компьютера или регистрация в системе;

* при определенных событиях, например при регистрации указанного события.

Перейдите на вкладку Triggers и нажмите кнопку New.

4. Из раскрывающегося списка Begin the task выберите пункт At log on.

5. Выберите 1 минуту или 2 минуты из списка Delay task for, чтобы успеть выполнить другие задачи, сопутствующие запуску компьютера. О преимуществах этого решения будет рассказано ниже.

6. Проверьте, установлен ли флажок Enabled, а затем нажмите кнопку OK, чтобы закрыть диалоговое окно New Trigger.

7. На экране Action (см. экран 2) следует выбрать одно из трех действий:

* запустить программу;

* отправить сообщение по электронной почте;

* показать сообщение.

 

Запуск действия программы
Экран 2. Запуск действия программы

Выберите пункт Start a program и нажмите кнопку Next.

8. На экране Start a Program нажмите кнопку Browse и найдите файл outlook.exe. В Windows 7 этот файл располагается в одном из следующих мест:

* 64-разрядная Windows — C:\program files\microsoft office\office14\

* 32-разрядная Windows — C:\program files (x86)\microsoft office\office14\

9. Нажмите кнопку Next для перехода к экрану Finish.

10. На экране Finish приведены сводка сведения о задаче и флажок для показа дополнительных вариантов после ее создания. Щелкните Finish, чтобы создать задачу, которая вносится в список Active Tasks.

Запуск задач по требованию

В окне Active Tasks можно дважды щелкнуть любую запланированную задачу, чтобы открыть ее свойства. Любую задачу можно выполнить по требованию, таким образом ее можно запускать для удобства, тестирования или отладки (последнее может быть отчасти встроенной функцией). Для запуска задач по требованию используется следующая процедура.

-В центральной панели планировщика задач, в списке активных задач, дважды щелкните элемент, чтобы увидеть его свойства. В правой панели Actions показаны варианты для выбранного элемента (экран 3).

 

Команда Run
Экран 3. Команда Run

-Щелкните пункт Run для запуска задачи. Остановить процесс можно нажатием кнопки Stop.

Изменение существующей задачи

Отменить задачу можно из меню Selected Item. Чтобы удалить выбранную задачу, используйте кнопку Delete.

На центральной панели показаны свойства выбранной задачи. Однако эти свойства доступны только для чтения. Для доступа к этой информации в редактируемой форме щелкните Properties в разделе Selected Item. Откроется окно Properties с более тонкими возможностями управления триггерами, действиями, условиями и параметрами задачи, как показано на экране 4.

 

Вкладка Task Settings
Экран 4. Вкладка Task Settings

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

* планирование отложенного выполнения сценария запуска;

* планирование завершения работы после того, как сервер бездействовал в течение определенного времени;

* выполнение сценария Windows PowerShell;

* планирование задачи на основании определенного события;

* тестирование задач;

* тонкая настройка задачи, запускаемой событием, через интерфейс Developer API планировщика задач.

Планирование отложенного выполнения сценария запуска

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

Возникает вопрос, зачем нужен такой триггер запланированных задач, если те же функции имеются в папке Startup. Тому есть две причины. Прежде всего, загрузка и регистрация в системе сами по себе представляют изрядную нагрузку для компьютера. Запуск процессов непосредственно при регистрации в системе создает дополнительную нагрузку на компьютер, из-за чего он может не реагировать на действия пользователя в течение некоторого времени. Благодаря отложенной плановой задаче можно подождать, пока компьютер завершит подготовительные операции. Вторая, более важная, причина заключается в том, что запланированные задачи можно запускать с более широкими правами, чем элементы в папке Startup, которые выполняются с учетными данными выполнившего регистрацию пользователя. Механизм контроля учетных записей (UAC) требует наличия расширенного маркера для выполнения определенных задач, таких как:

* резервное копирование и восстановление данных;

* изменение членства в группах;

* создание административных сценариев;

* создание сценариев регистрации;

* создание учетных записей пользователей и групп;

* развертывание и обновление программных продуктов.

Подготовим задачу для резервного копирования после регистрации в системе. Поскольку требуется настроить расширенные параметры, будет создана обычная, а не простая задача. При этом шаги в основном те же, что и при создании задачи запуска Outlook, единственное отличие — первым действием будет Create Task (вместо Create Basic Task).

В диалоговом окне Create Task, как показано на экране 5, формируются учетная запись и полномочия, которые будут использоваться задачей. При работе с UAC пользователи группы администраторов располагают двумя маркерами. Начальный маркер представляет типовые права пользователя. Если щелкнуть исполняемый файл и выбрать вариант запуска от имени администратора, то используется полный маркер, содержащий административные права.

 

Параметры Task Security
Экран 5. Параметры Task Security

Аналогично, в режиме Run with highest privileges («Выполнить с наивысшими правами»), выбранном в области параметров безопасности диалогового окна Create Task, используется полный маркер. Этот параметр действует, только если пользователь входит в группу администраторов, так как лишь эти пользователи имеют два маркера. Для запуска программы с административными правами из обычной учетной записи пользователя необходимо выбрать режим Run whether user is logged on or not («Выполнять вне зависимости от зарегистрировавшегося пользователя»), а затем выбрать пользователя, члена административной группы. Введите имя пользователя в форме имя_компьютера\имя_пользователя (например, server01\administrator). Введите пароль. На вкладке Triggers нажмите кнопку New, чтобы открыть диалоговое окно New Trigger, показанное на экране 6. В раскрывающемся списке Delay task for даны шесть вариантов, от 30 секунд до 1 дня. К сожалению, собственное время задержки задать нельзя; приходится выбирать период, ближайший к нужному. В нашем случае должно хватить одной минуты. Нажмите кнопку OK, чтобы закрыть диалоговое окно.

 

Диалоговое окно New Trigger
Экран 6. Диалоговое окно New Trigger

На вкладке Actions нажмите кнопку New. Нажмите кнопку Browse и найдите файл C:\program files\cwrsync\cwrsync.cmd в диалоговом окне New Action. Обратите внимание, что с одной задачей может быть связано несколько действий. Нажмите кнопку Next и перейдите к экрану Finish, а затем нажмите Finish, чтобы создать задачу.

Планирование завершения работы сервера

В этой плановой задаче используется утилита Windows Sysinternals PsShutdown для завершения работы сервера, который бездействовал в течение определенного времени. Это отличный способ сэкономить системные ресурсы.

1. Создайте новую задачу, как в предыдущем разделе.

2. В текстовом поле Program/script введите команду:

C:\Adminutils\PsShutdown.exe

3. Введите следующие аргументы в текстовом поле Add arguments:

-s -f -c -t 10

4. Можно указать задержку, чтобы задача выполнялась только в случае, если компьютер бездействует в течение определенного времени. Выберите 30 минут в раскрывающемся списке Delay task for.

Выполнение сценария Windows PowerShell в качестве плановой задачи

PowerShell — самый мощный административный инструмент Windows, поэтому естественно, что администраторы Windows применяют планировщик задач для автоматизации запуска сценариев PowerShell. Эти два инструмента прекрасно дополняют друг друга.

Для выполнения сценариев PowerShell следует назначить политику выполнения. Для непосредственного выполнения команды PowerShell укажите параметр команды, а затем используйте символ амперсанда (&), пару фигурных скобок ({}) и выполняемую команду PowerShell:

powershell -NoLogo -executionpolicy RemoteSigned -command &{getprocess>>C:\fso\mytestprocesses.txt}

Я рекомендую применять команду Run, как показано на экране 7, для тестирования синтаксиса команды перед планированием задачи.

 

Запуск сценария PowerShell
Экран 7. Запуск сценария PowerShell

Для выполнения сценария просто замените флаг -command флагом -file:

powershell.exe -noprofile -executionpolicy RemoteSigned -file%public%\myscript.ps1

Обратите внимание, что переменные среды разделяются символами процента (%), как в любой команде Cmd.exe.

Планирование задачи на основе события

События Windows — вероятно, самые сложные из всех триггеров задач. Дело в том, что события Windows охватывают целый набор потенциальных триггеров. Чтобы открыть программу просмотра событий в пакете Server 2008 Administrative Tools, щелкните Start, Control Panel, System and Security, Event Viewer.

В программе просмотра событий (экран 8) отображается информация об аппаратных, программных и системных неполадках. События подразделяются по типам:

* ошибка — существенная неполадка, такая как потеря данных или сбой функциональности (например, не удается загрузить службу при запуске компьютера);

* предупреждение — не всегда имеет большое значение, но может указывать на проблемы в будущем (например, на диске осталось мало места);

* информация — сведения об успешном функционировании прикладной программы, драйвера или службы (например, успешно загружен сетевой драйвер);

* аудит успешных попыток — успешная проверенная попытка доступа (например, пользователь успешно совершает регистрацию в системе);

* аудит неуспешных попыток — неудачная проверенная попытка доступа (например, безуспешная попытка пользователя обратиться к сетевому накопителю).

 

Программа просмотра событий
Экран 8. Программа просмотра событий

Событие можно привязать к любому типу событий, щелкнув по нему правой кнопкой мыши в программе просмотра событий и выбрав пункт Attach Task To This Event в раскрывающемся меню. В результате запускается мастер Create Basic Task Wizard, в котором можно настроить параметры задачи.

Тонкая настройка задачи, запускаемой событием

Со времени выпуска Windows Vista планировщик задач располагает новыми интерфейсами для программистов, работающих на языке C++, объектами сценариев для разработчиков VBScript и схемой для определения задач в XML. Таким образом достигается непревзойденная гибкость как при создании, так и при тонкой настройке задач.

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

* 4730 — удалена глобальная группа безопасности;

* 4731 — создана защищенная глобальная группа безопасности;

* 4732 — добавлен член в локальную группу безопасности;

* 4733 — удален член из локальной группы безопасности;

* 4734 — удалена локальная группа безопасности;

* 4735 — изменена локальная группа безопасности;

* 4737 — изменена глобальная группа безопасности.

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

1. Выберите When a specific event is logged («При записи определенного события в журнал») на экране Task Trigger.

2. Код 4732 идентифицирует добавление члена в локальную группу securityenabled. Введите этот код в поле Event ID на экране Specific Event Is Logged, как показано на экране 9.

3. Чтобы найти журнал и источник для события, откройте программу просмотра событий; на левой панели выберите Windows Logs, Security и откройте диалоговое окно Properties. На вкладке General вы увидите поля Log Name и Source. Последнее может быть сокращено, но если разместить указатель мыши над именем, выводится подсказка с полным текстом, как показано на экране 10.

4. На экране Action выберите Display a message (вывод сообщения).

5. Нажмите кнопку Finish, чтобы создать новую задачу.

 

Подробности триггера зарегистрированного события
Экран 9. Подробности триггера зарегистрированного события

 

Определение журнала и источника
Экран 10. Определение журнала и источника

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

1. Дважды щелкните новую задачу в списке Task Scheduler Active Tasks, как показано на экране 11.

2. Щелкните Export в списке Selected Item и сохраните XML-файл в любом месте по своему выбору.

3. Откройте исходный текст XML в привычном текстовом редакторе. Его вид будет похож на приведенный в листинге. Добавьте программный код TargetUserName в раздел EventTrigger, как показано во фрагменте A.

 

Задача Local Group Added
Экран 11. Задача Local Group Added

После этого запланированная задача будет отвечать на событие 4732, только если TargetUserName (то есть имя локальной группы безопасности) представляет собой SECURE NETWORKS.

Можно также отфильтровать определенных пользователей с помощью MemberName вместо TargetUserName. Дополнительные подробности о функционировании фильтра можно увидеть в XML-представлении события. Просто откройте свойства события, перейдите на вкладку Details и выберите режим XML View. Полный исходный текст показан на экране 12. Данные из этого события можно использовать в действии. Чтобы параметр EventData мог передать MemberName в действие, необходимо добавить программный код во фрагменте B листинга в экспортированный XML-файл, непосредственно перед строкой .

 

Свойства события в XML-представлении
Экран 12. Свойства события в XML-представлении

Теперь можно использовать переменную $(MemberName) в действии. В следующем исходном тексте эта переменная показана в поле сообщения:



Local Group Added
The $(MemberName) local group has been added.

После того, как измененный XML-код будет сохранен, удалите исходную задачу из планировщика задач. Теперь можно импортировать измененный XML-код. В правой области окна планировщика задач, в разделе Actions, нажмите кнопку Import Task. Подготовленная задача готова к применению.

Широчайшие возможности

Благодаря манипуляциям с триггерами, действиями и событиями планировщик задач Server 2008 обеспечивает очень гибкое управление большинством повседневных задач, в том числе и самыми сложными. Кроме того, большинство свойств доступно с помощью мастера планирования заданий. Более тонкое управление осуществляется посредством API-интерфейса Scheduled Task и XML-схемы.

Листинг. XML-код для запуска события по определенному имени группы безопасности и передачи MemberName в Task Action



true







# BEGIN CALLOUT B

Event/EventData/Data[@Name='MemberName']

# END CALLOUT B