Как запускать скрипт по расписанию windows

Содержание
  1. Запуск программ по расписанию с помощью планировщика Windows
  2. Создание и управление заданиями планировщика из PowerShell
  3. Управление заданиями Task Scheduler с помощью PowerShell
  4. Как создать задание планировщика с помощью PowerShell?
  5. Получение информации и запуск заданий планировщика из PowerShell
  6. Экспорт и импорт заданий планировщика в XML файл
  7. Используем Powershell для работы с планировщиком заданий для создания и изменения задач
  8. Работа планировщика в Powershell
  9. Создание скрипта для тестирования
  10. Создание выполняемого действия для планировщика
  11. Создание временного события — триггера
  12. Регистрация задачи в планировщике
  13. Запуск и получение дополнительной информации
  14. Изменение пользователя, параметров безопасности и уровня запуска
  15. Изменение триггеров и действий
  16. Бэкап, удаление и восстановление задач планировщика с Powershell
  17. Резервное копирование
  18. Удаление, отключение и включение
  19. Восстановление
  20. Анализ выполнения и завершения, а так же сравнение

Запуск программ по расписанию с помощью планировщика Windows

Используя планировщик заданий Windows , вы можете запланировать запуск приложений в определённое время с определёнными условиями. В этой статье я расскажу, как запланировать выполнение нужных вам задач, в частности запуск программы для выгрузки данных из Тирики по расписанию. Программку такую можно заказать у нас; как это сделать, описано вот в этой статье. Планировщик заданий Windows — весьма полезная программа, самое главное ей надо научиться правильно пользоваться, приступим к настройке заданий.

Для запуска планировщика нужно зайти в «Панель управления» в раздел «Администрирование»:


Далее в следующем окне (см.ниже) необходимо найти пункт «Планировщик заданий» и щёлкнуть по нему мышкой:

Вот мы и попали в главное окно планировщика заданий. В этом окне нам нужно выбрать пункт «Создать задачу»:

И мы попадём в окно «Создание задачи» (см .ниже) в этом окне на вкладке «Общие» придумаем имя будущей задачи, например «Export spiska tovarov» если требуется запускать задачу с правами администратора, то поставьте галочку напротив «выполнить с наивысшими правами». Другие поля заполнять не обязательно.

Далее в этом окне переходим на вкладку «Триггеры» (см. ниже), эта вкладка пока пуста. На ней нажимаем кнопку «Создать»:

И мы попадём в окно «Создание триггера» (см. ниже), открываем ниспадающее меню напротив «Начать задачу» и выбираем «По расписанию». Указываем нужные параметры расписания, я указал ежедневно, повторять каждый час бесконечно. Нажимаем кнопку «ОK» для сохранения созданного триггера:

Далее переходим на вкладку «Действия» (см ниже) где также нужно нажать кнопку «Добавить» чтоб настроить выполняемое действия по нашему настроенному расписанию на предыдущем шаге:

И мы попадаем в окно «Создание действия». Здесь выбираем запуск программы и нажимаем кнопку «Обзор» для того, чтобы указать путь до запускаемой нами программы:

Откроется проводник, и в нем мы укажем программу, которую хотим запускать по расписанию. Я указал программу «Export spiska tovarov»:

После нажатия кнопки «Открыть» мы попадём в предыдущее окно, где будет указан путь до запускаемой программы (см. ниже). В этом окне нужно нажать кнопку ОК.

Снова попадём в окно «Создание Задачи» (см. ниже) в котором буде присутствовать только что созданная Вами задача:

На вкладке «Условия» (см. ниже), почитайте предлагаемые условия, все просто и понятно, сложностей возникнуть не должно.

Вкладка «Параметры» почитайте предлагаемые параметры, установите по своему усмотрению, сложностей это так же не должно вызвать:

Нажимаем Ok, все задача создана! И она будет выполнятся по расписанию с заданными параметрами.

Создание и управление заданиями планировщика из PowerShell

Большинство пользователей и администраторов привыкли использовать графический интерфейс консоли Taskschd.msc для создания заданий планировщика Windows (Task Scheduler), запускаемых по расписанию. Однако в различных скриптах и автоматизируемых задачах для создания заданий планировщика гораздо удобнее использовать возможности PowerShell. В этой статье мы покажем, как создавать и управлять заданиями планировщика Windows из PowerShell.

Управление заданиями Task Scheduler с помощью PowerShell

В Windows 10/Windows Server 2016 для управления задачами в планировщике используется PowerShell модуль ScheduledTasks. Список командлетов в модуле можно вывести так:

Get-Command -Module ScheduledTasks

  • Disable-ScheduledTask
  • Enable-ScheduledTask
  • Export-ScheduledTask
  • Get-ClusteredScheduledTask
  • Get-ScheduledTask
  • Get-ScheduledTaskInfo
  • New-ScheduledTask
  • New-ScheduledTaskAction
  • New-ScheduledTaskPrincipal
  • New-ScheduledTaskSettingsSet
  • New-ScheduledTaskTrigger
  • Register-ClusteredScheduledTask
  • Register-ScheduledTask
  • Set-ClusteredScheduledTask
  • Set-ScheduledTask
  • Start-ScheduledTask
  • Stop-ScheduledTask
  • Unregister-ClusteredScheduledTask
  • Unregister-ScheduledTask

Как создать задание планировщика с помощью PowerShell?

В современных версиях PowerShell (начиная с PowerShell 3.0 в Windows Server 2012/Windows 8) для создания заданию планировщика нужно использовать командлеты New-ScheduledTaskTrigger и Register-ScheduledTask.

Предположим, наша задача создать задание планировщика, которое должно запускаться при загрузке компьютера (или в определенное время) и выполнять какой-то PowerShell скрипт. Создадим задание планировщика с именем StartupScript_PS. Данное задание должно каждый день в 10:00 запускать PowerShell скрипт, хранящийся в файле C:\PS\StartupScript.ps1 из-под учетной записи системы (SYSTEM). Задание будет выполняться с повышенными привилегиями (галка “Run with highest privileges”).

Читайте также:  Nvidia drivers windows 10 asus

$Trigger= New-ScheduledTaskTrigger -At 10:00am -Daily
$User= «NT AUTHORITY\SYSTEM»
$Action= New-ScheduledTaskAction -Execute «PowerShell.exe» -Argument «C:\PS\StartupScript.ps1»
Register-ScheduledTask -TaskName «StartupScript_PS» -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force

Если задание успешно создано, появится надпись Ready.

Теперь ваш PowerShell скрипт будет запускаться по указанному расписанию. Если на вашем компьютере настроена PowerShell Execution Policy, блокирующая запуск скриптов PS1, вы можете запустить скрипт их планировщика с параметром –Bypass.

Используйте такую строку при создании нового задания:

$Action= New-ScheduledTaskAction -Execute «PowerShell.exe» -Argument “-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File C:\PS\StartupScript.ps1″

Откройте консоль Taskschd.msc и проверьте, что проверьте, что в Task Scheduler Library появилось новое задание планировщика.

$TaskName = «NewPsTask»
$TaskDescription = «Запуск скрипта PowerShell из планировщика»
$TaskCommand = «c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe»
$TaskScript = «C:\PS\StartupScript.ps1»
$TaskArg = «-WindowStyle Hidden -NonInteractive -Executionpolicy unrestricted -file $TaskScript»
$TaskStartTime = [datetime]::Now.AddMinutes(1)
$service = new-object -ComObject(«Schedule.Service»)
$service.Connect()
$rootFolder = $service.GetFolder(«\»)
$TaskDefinition = $service.NewTask(0)
$TaskDefinition.RegistrationInfo.Description = «$TaskDescription»
$TaskDefinition.Settings.Enabled = $true
$TaskDefinition.Settings.AllowDemandStart = $true
$triggers = $TaskDefinition.Triggers
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa383915(v=vs.85).aspx
$trigger = $triggers.Create(8)

Получение информации и запуск заданий планировщика из PowerShell

Вы можете вывести список всех активных заданий планировщика в Windows с помощью команды:

Get-ScheduledTask -TaskPath | ? state -ne Disabled

Чтобы получить информацию о конкретном задании:

Get-ScheduledTask CheckServiceState_PS| Get-ScheduledTaskInfo

Вы можете отключить это задание:

Get-ScheduledTask CheckServiceState_PS | Disable-ScheduledTask

Чтобы включить задание:

Get-ScheduledTask CheckServiceState_PS | Enable-ScheduledTask

Чтобы запустить задание немедленно (не дожидаясь расписания), выполните:

Чтобы полностью удалить задание из Task Scheduler:

Unregister-ScheduledTask -TaskName CheckServiceState_PS

Если нужно изменить имя пользователя, из-под которого запускается задание и, например, режим совместимости, используйте командлет Set-ScheduledTask:

$task_user = New-ScheduledTaskPrincipal -UserId ‘winitpro\kbuldogov’ -RunLevel Highest
$task_settings = New-ScheduledTaskSettingsSet -Compatibility ‘Win7’
Set-ScheduledTask -TaskName CheckServiceState_PS -Principal $task_user -Settings $task_settings

Экспорт и импорт заданий планировщика в XML файл

С помощью PowerShell можно экспортировать любое задания планировщика в текстовый XML файл для распространения на другие компьютеры. Вы можете экспортировать задание из графического интерфейса Task Scheduler или из консоли PowerShell.

Следующая команда экспортирует задание StartupScript_PS в файл StartupScript_PS.xml:

Export-ScheduledTask «StartupScript_PS» | out-file c:\temp\StartupScript_PS.xml

schtasks /query /tn «NewPsTask» /xml >> «c:\ps\NewPsTask.xml»

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

Воспользуйте командлетом PowerShell Register-ScheduledTask чтобы параметры задания из файла и зарегистрировать его:

Register-ScheduledTask -Xml (Get-Content “\\Server1\public\NewPsTask.xml” | out-string) -TaskName «NewPsTask»

schtasks /create /tn «NewPsTask» /xml «\\Server1\public\NewPsTask.xml » /ru corp\aaivanov /rp Pa$$w0rd
schtasks /Run /TN «NewPsTask»

Обратите внимание, что в этом примере указаны данные учетной записи, из-под которой будет запускаться задание. Если имя и пароль учетной записи не указаны, то т.к. они не хранятся в задании, они будут запрошены при импорте.

Используем Powershell для работы с планировщиком заданий для создания и изменения задач

18 декабря 2020

В Windows есть механизм под названием ‘Планировщик заданий’ (Task Scheduler). Основная задача планировщика — выполнение задач в определенный момент времени или при определенном действии. В этой статье будет рассмотрены варианты работы с ним через Powershell. На примере мы создадим задание в виде скрипта с Powershell, изменим и удалим его используя только команды.

Навигация по посту

Работа планировщика в Powershell

Отличительной чертой работы Powershell является то, что мы должны создать каждый из объектов (результат команд) планировщика отдельно, а затем объединить их с помощью 1 команды. Сами объекты делятся на следующие:

  1. Action (Действие) — определяет что мы должны запустить. Действия проявляются как программа (например браузер) с аргументами (открыть определенный сайт). В одной задаче может быть до 32 действий;
  2. Trigger (Триггер) — это событие при котором должно запуститься действие. Событие может быть привязано к времени или каким-то процессом в системе (включение компьютера, вход пользователя и т.д.). Время можно устанавливать как определенное, например в 14:00, так и интервальное — каждые 2 часа. Так же как и действий триггеров может быть несколько.
  3. Settings (Настройки) — дополнительные условия обработки задач. Это может быть перезапуск в случае сбоя задачи или самоудаление если задача не используется.
  4. Security Options (Параметры безопасности) — определяют привилегии и пользователя от имени которого будут запущены задания.

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

За создание задач в планировщике отвечает модуль ScheduledTasks, который имеет следующие команды:

Читайте также:  Как установит windows aero

Создание скрипта для тестирования

Что бы продемонстрировать работу планировщика я создам скрипт, который будет сохранять логи с журнала Windows в папку ‘logs’. Ниже находится сам скрипт:

Команды выше не должны выдавать каких либо ошибок. Ошибка может быть, например, с несуществующей папкой ‘logs’. Сам скрипт я сохранил по пути ‘C:\scheduler_task.ps1’. Его запуск не выдает каких-то ошибок:

У вас так же будет создан файл в папке ‘logs’.

Создание выполняемого действия для планировщика

Для создания ‘action’ мы должны указать программу и аргументы. В качестве программы будет сам интерпретатор ‘powershell.exe’, а аргументом будет путь до скрипта. Как говорилось раньше у нас будет несколько объектов (результат команд) и все их нужно будет объединить. Что бы это было возможным мы должны поместить результаты работы в переменные:

Мы так же можем указать параметр ‘WorkingDirectory’, который определяет откуда и будет запущена программа. Учитывая, что ‘powershell.exe’ виден через системные переменные использовать параметр ‘WorkingDirectory’ нам не требуется.

Действия выше аналогичны следующим настройкам в интерфейсе (т.е. так мы обычно добавляем скрипт Powershell в планировщик):

Создание временного события — триггера

Следующим мы определим, когда мы будем запускать задачу. Это делается с помощью команды ‘New-ScheduledTaskTrigger’. Эта команда имеет множество параметров, которые делятся на системные события и временные.

Системные события, которые мы можем использовать, следующие:

  • AtLogOn — во время входа пользователя в систему;
  • AtStartup — во время запуска системы.

Аргументы связанные со временем:

  • At — точное время выполнение скрипта;
  • Daily — ежедневно;
  • DaysInterval — интервал в днях. Если указать цифру 1, то подразумевается, что задача будет запускаться ежедневно. Если указать 2 — то задача будет запускаться через день;
  • DaysOfWeek — день недели, когда будет выполнен запуск. Возможны варианты: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday;
  • Once — запуск будет выполнен единожды;
  • Weekly — запуск по неделям;
  • WeeksInterval — интервал между неделями;
  • RandomDelay — указывает задержку между запусками. Задержка определяется случайно от указанного значения. Принимает не число, а объект TimeSpan;
  • RepetitionDuration — Срок действия задачи. Принимает не число, а объект TimeSpan.
  • RepetitionInterval — время через которое задача будет повторяться. Принимает не число, а объект TimeSpan.

Большую часть команд, связанных со временем, мы можем сочетать вместе. Так, например, мы создадим триггер выполнится однажды в 13:00:

Еще несколько примеров:

Меня интересует ежедневный запуск задачи с периодичностью в 5 минут. Для ‘RepetitionInterval’, который устанавливает такие интервалы, нужно использовать дополнительную команду ‘New-TimeSpan’. В этой команде определим сам интервал:

Регистрация задачи в планировщике

Теперь, после выполнения минимальных требований в виде ‘action’ и ‘trigger’, мы должны объединить эти объекты. Это делается с помощью команды ‘Register-ScheduledTask’. Дополнительно мы можем определить название и описание создаваемого объекта:

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

TaskPath указывает где была создана задача. В примере выше это произошло в корне планировщика:

Вы можете использовать аналогичный параметр для регистрации задачи в другой директории:

Способа узнать путь два:

  1. Через графический интерфейс;
  2. Через команду ‘Get-ScheduledTask’ (будет рассмотрена ниже).

В powershell есть еще одна команда, которая может участвовать в создании задач «New-ScheduledTask». Основное отличие такой команды в том, она не регистрирует (добавляет) задачу в сервис планировщика. Если бы мы использовали обе команды это бы выглядело так:

Запуск и получение дополнительной информации

Для запуска задачи, не зависимо от триггеров, используется команда ‘Start-ScheduledTask’:

У нас так же есть 2 команды, которые возвращают информацию о задачах.

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

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

  • TaskName — имя объекта;
  • TaskPath — путь до объекта.

Более полезная команда следующая, так как вернет немного больше информации:

Само собой все эти команды можно использовать в конвейере:

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

Фильтрация через Where-Object в Powershell с примерами

Изменение пользователя, параметров безопасности и уровня запуска

Создавая задачи в планировщике мы имеем блок ‘Security Options’, который чаще используется с настройками по умолчанию. В этом блоке определяются следующие параметры:

  • Пользователь, от имени которого будет выполнен запуск;
  • Выполняется ли задача для вошедших в систему пользователей;
  • Привилегии запуска (от пользователя/администратора);
  • Совместимость.
Читайте также:  Windows embedded automotive download

В графическом интерфейсе эти параметры настраиваются в следующем блоке:

Так же как и в случае с созданием задачи, в случае ее изменения мы создаем разные объекты (результаты команд), которые затем привязываем через команду ‘Set-SchedukedTask’.

С помощью следующих команд мы изменим пользователя, повысим права и изменим совместимость:

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

  • Set-ScheduledTask : No mapping between account names and security IDs was done.

Само собой эти же объекты можно использовать при создании (регистрации) задачи в планировщике:

Учитывайте, что у New-ScheduledTaskSettingsSet около 30 возможных параметров (работа при отключенной батареи, максимальное количество перезапусков и т.д.). В примере выше рассмотрено лишь несколько.

Изменение триггеров и действий

С помощью Set-ScheduledTask так же добавляются и изменяются триггеры и действия. Изменение будут заключаться в полной замене существующих триггеров и действий у задач. Вам просто нужно создать объект по аналогии с тем, как это делалось в предыдущих разделах:

Бэкап, удаление и восстановление задач планировщика с Powershell

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

Резервное копирование

Для бэкапа мы можем использовать команду Export-CliXml. Для этого нам нужно будет получить задачу и использовать конвейер:

Для экспорта в Powershell так же есть ‘Export-ScheduledTask’, но нет аналогичной команды импорта. Что бы импортировать такие файлы-задачи мы можем использовать только GUI. Из-за этого она не приведена в примере выше.

Удаление, отключение и включение

При удалении задачи, по умолчанию, запрашивается подтверждение. Что бы этого не было добавляется ключ ‘Confirm’:

Если требуется только отключить задачу используйте Disable:

Восстановление

Восстановление выполняется в несколько шагов. Первое — мы должны выполнить импорт XML документа в Powershell:

На одном из сайтов я прочитал, что следующий параметр нужно изменять на «Interactive», так как без него не будет работать задача, но у меня этот параметр не изменялся при экспорте:

Этот параметр связан со входом пользователя через GUI. Аналогичное название в интерфейсе планировщика задач «Выполнять только для пользователей, вошедших в систему». Если этот параметр у вас отличается — вы сможете изменить его так:

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

Как создавать команды и функции в Powershell вызывать их и передавать параметры

Анализ выполнения и завершения, а так же сравнение

Используя предыдущие команды мы можем выполнить некоторую автоматизацию. Например так мы можем увидеть результат выполненных задач:

Часть этих кодов имеет следующую расшифровку (был использован автоматический переводчик):

  • 0 — операция успешно завершена.
  • 1 — Вызывается неправильная функция или неизвестная функция. 2 Файл не найден.
  • 10 — Неправильная среда.
  • 267008 — Задача готова к запуску в следующее запланированное время.
  • 267009 — В данный момент идет выполнение.
  • 267010 — Задача не будет запущена в запланированное время, потому что она отключена.
  • 267011 — Запуск еще не был выполнен.
  • 267012 — Для этой задачи больше нет запланированных запусков.
  • 267013 — Одно или несколько свойств, необходимых для запуска этой задачи по расписанию, не были установлены.
  • 267014 — Последний запуск задачи был прерван пользователем.
  • 267015 — Либо у задачи нет триггеров, либо существующие триггеры отключены или не установлены.
  • 2147750671 — Учетные данные повреждены.
  • 2147750687 — Экземпляр этой задачи уже запущен.
  • 2147943645 — Служба недоступна (установлен ли флажок «Запускать только при входе пользователя в систему»?).
  • 3221225786 — Приложение было закрыто в результате нажатия CTRL + C.
  • 3228369022 — Неизвестное программное исключение.

Альтернативное — вы можете открыть интерфейс планировщика и посмотреть какая ошибка отображается там (она будет текстом).

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

Такой же подход можно использовать при поиске странных сервисов-программ. Например у нас есть эталонный компьютер/сервер и на нем созданы все нужные задачи. Всех их мы помещаем в один объект, а затем сравниваем с другими экземплярами:

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

Оцените статью