Как добавить скрипт в планировщик windows

Запуск PowerShell скриптов по расписанию

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

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

Способ 1

Для запуска скрипта воспользуемся оснасткой Task Scheduler, он же планировщик заданий. Найти его можно в разделе Administrative Tools, либо нажав Win+R и введя команду taskschd.msc. Открываем планировщик и в разделе Actions выбираем пункт Create Task.

создаем запланированное задание в Task Scheduler

На вкладке General указываем имя и описание задания, а также (по необходимости) пользователя, от имени которого задание будет запускаться. Для того, чтобы задание выполнялось вне зависимости от того, залогинен ли пользователь в системе, выбираем опцию «Run whether user is logged on or not». Если для выполнения задания требуется повышение привилегий, то отмечаем опцию «Run with highest privileges».

новое задание, вкладка General

Далее идем на вкладку Triggers и создаем новый триггер, в котором будет храниться расписание запуска нашего задания. В поле Start указываем дату и время запуска, а в поле Expire — дату и время завершения задания. Указываем выполнять задание ежедневно (Daily) и задаем период повтора (Recur every) 1 день.

Примечание. Если вы хотите запускать задание чаще, чем раз в день, то надо выбрать одноразовое выполнение (One time), а в разделе Advanced settings отметить пункт Repeat task every и указать время повторения, минимум 5 минут, максимум 1 час. Если этого недостаточно, то дополнительно в поле Delay task for up to можно указать временную задержку.

задаем условие для запуска задания

И основное. Переходим на вкладку Action и указываем действие для запланированного задания. Напомню, что в целях безопасности PowerShell скрипты могут выполняться только интерактивно, то есть сначала надо запустить оболочку PowerShell и уже в ней указать путь к скрипту. Поэтому в поле «Action» указываем запуск powershell.exe, а в поле «Add Arguments» параметр -File и путь к нашему скрипту, вот так:

-File ″C:Scriptsstart.ps1″

Также в поле аргументы можно указать:

-Command — выполняет указанные команды и любые другие параметры. Этот параметр тоже можно использовать для запуска скрипта, например: -Command ″& {C:Scriptsstart.ps1}″. Кроме того, с его помощью можно передавать в скрипт параметры: -Command ″& {C:Scriptsstart.ps1 -a 1 -b 3}″;
-ExecutionPolicy — задает политику выполнения скриптов для текущего сеанса, может принимать значения Unrestricted, RemoteSigned, AllSigned и Restricted. Заданная политика будет действовать только в текущем сеансе и имеет приоритет над любыми ранее созданными политиками;
-NonInteractive — отключить вывод интерактивных запросов к пользователю;
-WindowStyle Hidden — запуск окна PowerShell в скрытом режиме, незаметно для пользователя;
-NoProfile — предотвращает загрузку профиля, что может несколько ускорить выполнение скрипта;
-NoExit — оставить оболочку открытой после отработки скрипта. Это может понадобиться при проверке и отладке скрипта.

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

Заполнив необходимые поля жмем ОК и сохраняем задание. Теперь скрипт будет запускаться по расписанию ежедневно в заданное время в течении 10 дней.

Способ 2

В PowerShell 3.0 появился новый функционал Sheduled Job, дающий возможность создавать запланированные задания прямо из консоли, не пользуясь оснасткой планировщика. Воспользуемся им для планового запуска нашего скрипта.

Сначала создаем расписание запуска (ежедневно в полпятого вечера, в течении 10 дней):

$t = New-JobTrigger -Daily -At 4:30PM -DaysInterval 10

Затем сохраняем в переменной учетные данные:

$cred = Get-Credential contosoadministrator

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

$o = New-ScheduledJobOption -RunElevated

И регистрируем задание с именем Start:

Register-ScheduledJob -Name Start -FilePath C:Scriptsstart.ps1 -Trigger $t -Credential $cred -ScheduledJobOption $o

создание запланированного задания в PowerShell

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

запланированное задание в Task Sheduler

Примечание.  Для каждого запланированного задания PowerShell в директории %systemdrive%Users%username%AppDataLocalMicrosoftWindowsPowerShellScheduledJobs создается одноименная папка. В этой папке находится само задание в XML-файле и папка Output, в которой, в подпапках по времени выполнения, хранится история выполнения задания — результат выполнения (файлs Result.xml) и статус задания (Status.xml). Эти файлы могут пригодиться для отладки и диагностики в том случае, если задание не отрабатывает должным образом.

Execution Policy

В заключение напомню об одном немаловажном моменте, а именно о политике выполнения скриптов Execution Policy. Посмотреть текущее значение политики можно командой Get-ExecutionPolicy. Политика выполнения может иметь значения:

• Restricted — блокируется выполнение любых скриптов. Значение по умолчанию;
• AllSigned — разрешено выполнение скриптов, имеющих цифровую подпись;
• RemoteSigned — скрипты, подготовленные на локальном компьютере, можно запускать без ограничений, скрипты, загруженные из Интернета —  только при наличии цифровой подписи;
• Unrestricted — разрешено выполнение любых скриптов. При запуске неподписанного скрипта, который был загружен из Интернета, программа может потребовать подтверждение;
• Bypass — ничего не блокируется, никакие предупреждения и запросы не появляются.

Обычно для безпроблемного выполнения скриптов достаточно задать значение RemoteSigned. Изменить текущее значение можно командой Set-ExecutionPolicy, например:

Set-ExecutionPolicy RemoteSigned -force

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

Table of Contents

  • Introduction
    • Case 1: Run the PowerShell script with Windows Task Scheduler Locally.
    • Case 2: Run the PowerShell script with Windows Task Scheduler with a Domain Account.
  • Conclusion

Introduction

Let us discuss on setting up the Windows Task Scheduler to run the PowerShell scripts. We would discuss on setting up a simple script to run Locally on a system and to have script doing remote execution.
Windows Task Scheduler has wide functionalities and options we would explore the options useful for PowerShell.

Case 1: Run the PowerShell script with Windows Task Scheduler Locally.

Sample code for execution Locally.
Save the code in a file with .ps1 extension in C: to be called by the task scheduler.

1.#Sample script to test the script execution
from Task Scheduler.

2."Ran on System $(hostname) as $([Security.Principal.WindowsIdentity]::GetCurrent().Name)"
`

3.| Out-File c:scriptLog.log -Force -Append

Setting up the Windows Task Scheduler.

Create a Basic Task

Select the option as appropriate for script execution.

Select the Start Schedule as appropriate

Select «Start a Program«

Set the Program as «Powershell.exe» and the Arguments as «-file <filename>.ps1»

Troubleshooting Tips:
Putting the filename in single quotes here would give a error while executing.
0xFFFD0000
The filename should be in double quotes even if the path has spaces in the
folder names.
 
ie It should be «C:Program FilesMy DataRun Script.ps1»  and not ‘C:Program FilesMy DataRun Script.ps1’

Select «Open the Properties…..» and Click «Finish»

On the new Properties window.

Troubleshooting Tips :
Check the user name — Here its local Administrator or server RDS1. Though the Author of the Script is Domain account.
Ensure «Run whether user is logged on or not» is checked if your script is specific time dependent and not user logon status.
Check «Run with highest privileges» — To ensure the script runs elevated.

Validate the «Trigger» tab.

Validate the «Actions» Tab

Click «OK» and «Enter the Local Administrator Credentials.»

The Task is Scheduled.

Execute the Script

Status of the Task and the output in the Log file.

Troubleshooting Tips:
The task is set to run as Local Administrator.
Find the Execution Policy set on the System.
If the Execution Policy is Restricted, AllSigned as shown below the task would fail with
0x1 error.
If you want to bypass the execution Policy on the system, change the «Action» in the Properties of the Task as below.
Append the «-executionPolicy bypass» and save the Task.

Case 2: Run the PowerShell script with Windows Task Scheduler with a Domain Account.

Things change a bit here, when we plan to run the task scheduler with Domain Account.
Two things to consider.
Case 2 : Option 1.The PowerShell script does all it’s stuff locally when it’s called from the Windows Task Scheduler.
If the Domain Account has the Administrators privileges locally (domain user or the Domain Group if it’s part of Local Administrators Group), the scenario wont change much.

Change the «General» Tab setting for the user by going to the Task Properties.

Output of the Log File and the Task Status. Shows the Domain Account in use.

Once the job is configured to «Run as a Different User» it can be called by users who have Administrator rights.
Output of execution as Local Administrator on the same server.

Troubleshooting Tips:
Logging with local users without administrator privileges won’t allow you to see the Tasks in the Windows Task Scheduler.
Users without the Administrator rights may not be able to modify the tasks in the Windows Task Scheduler.

Case 2 : Option 2.The PowerShell script tries to do something remotely, like winrm, copying data, etc when it’s called from the Windows Task Scheduler.

A domain account with Administrators permissions on the remote servers and if the WinRM is enabled to communicate over. The scenario is simple. Configure the task to run as the account with the permissions on remote systems.

Sample Code: Save as C:RunScript1.ps1

1.#Sample script to test the script execution
from Task Scheduler

2.# Calling remote servers with account that
has administrators rights on the resources

3.get-service -ComputerName domain01,rds1
-Name bits| `

4.select Status, MachineName| Out-File
c:scriptLog.log -Force -Append

Account used : Domain Account with Administrators rights on the servers. 

Output: Able to query both the servers and returns the output.

Troubleshooting Tips:
If we configure local account to fetch the details it would fail, in a very rare case if the domain account name and password match the local account it may execute, probably to do with authentication options.
ie. <Domain>User01 and <Hostname>User01 
If you are running batch scripts instead of PowerShell, in addition to the permissions described, we need to ensure the «Allow logon as batch» in security policies.

Conclusion

Tried to cover some basics with common issues.
Reference URL : https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-task-scheduler


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

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

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

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

Планировщик задач Windows

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

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

Get-Command -Module ScheduledTasks

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

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

# Папка с логами
$log_dir = 'C:logs'
# Полный путь до файла с генерацией имени файла в виде даты
$log_file = $log_dir + "AppLog_$(Get-Date -format 'dd-mm-yyyy').xml"

# Получаем 10 последних логов приложений
$logs = Get-WinEvent -MaxEvents 10 -LogName application
# Сохраняем результат предыдущей команды в файл в формате XML
Export-CliXml -InputObject $logs -Path $log_file -Force

Скрипт сбора логов и сохранения в XML

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

.scheduler_task.ps1

Пример работы скрипта сбора логов и сохранения в XML

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

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

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

$task_action = New-ScheduledTaskAction `
    -Execute 'powershell.exe' `
    -Argument '-File C:scheduler_task.ps1'

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

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

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

Создание задачи в планировщике для работы скрипта 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:

$task_trigger = New-ScheduledTaskTrigger -Once -At 13:00

Создание триггера в Powershell для планировщика задач

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

# Ежедневно в 14:00
New-ScheduledTaskTrigger -Daily -At 14:00
# Запуск каждые 2 дня в 14:00
New-ScheduledTaskTrigger -Daily -DaysInterval 2 -At 14:00
# Каждый 2-ой понедельник в 14:00
New-ScheduledTaskTrigger -Weekly -WeeksInterval 2 -DaysOfWeek Monday -At 14:00

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

$time = New-TimeSpan -Minutes 5
$task_trigger = New-ScheduledTaskTrigger -Once -At 0:00 -RepetitionInterval $time

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

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

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

$name = 'Сбор логов'
$description = 'Сбор логов приложений каждые 5 минут в папку c:logs'

Register-ScheduledTask -TaskName $name `
   -Description $description `
   -Action $task_action `
   -Trigger $task_trigger

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

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

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

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

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

Register-ScheduledTask -TaskName 'SomeTask' `
   -TaskPath 'Microsoft' `
   -Action $action1,$action2 `
   -Trigger $trigger1,$trigger2

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

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

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

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

# Объединение объектов
$task = New-ScheduledTask -Action $action1,$action2 `
       -Trigger $trigger1,$trigger2

# Их активация
Register-ScheduledTask -TaskName 'SomeTask' `
                      -TaskPath 'Microsoft' `
                      -InputObject $task

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

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

Start-ScheduledTask -TaskName 'Сбор логов'

Запуск задачи планировщика с Powershell

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

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

Get-ScheduledTask

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

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

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

Get-ScheduledTaskInfo -TaskName 'Сбор логов'

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

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

Get-ScheduledTask -TaskName 'Сбор логов' | Start-ScheduledTask

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

Stop-ScheduledTask 'Сбор логов'

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

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

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

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

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

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

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

# Изменяем пользователя и повышаем права запуска
$task_user = New-ScheduledTaskPrincipal -UserId '.admin' -RunLevel Highest
# Изменяем совместимость
$task_settings = New-ScheduledTaskSettingsSet -Compatibility 'Win8'
# Добавляем объекты созданные выше к существующей задаче
Set-ScheduledTask -TaskName 'Сбор логов' -Principal $task_user -Settings $task_settings

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

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

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

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

$name = 'Task 3'

Register-ScheduledTask -TaskName $name `
   -Action $task_action `
   -Trigger $task_trigger `
   -Principal $task_user `
   -Settings $task_settings

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

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

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

$trigger = New-ScheduledTaskTrigger -Daily -At 14:00
$action = New-ScheduledTaskAction -Execute Calc.exe

Set-ScheduledTask -TaskName 'Сбор логов' -Action $action -trigger $trigger

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

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

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

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

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

Get-ScheduledTask -TaskName 'Сбор логов' | Export-Clixml 'C:LogTaskBackup.xml'

Резервное копирование задач планировщика с Powershell

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

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

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

Unregister-ScheduledTask -TaskName 'Сбор логов' -Confirm:$False

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

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

Disable-ScheduledTask -TaskName 'Сбор логов'

Включение:

Enable-ScheduledTask -TaskName 'Сбор логов'

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

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

$task = Import-Clixml -Path 'C:LogTaskBackup.xml'

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

$task.Principal

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

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

$task.Principal.LogonType = 'Interactive'

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

Register-ScheduledTask `
   -TaskName $task.TaskName `
   -Action $task.Actions `
   -Trigger $task.Triggers `
   -Settings $task.Settings `
   -Principal $task.Principal `
   -User 'administrator' `
   -Password '123'

Восстановление бэкапа планировщика задач Powershell

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

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

Get-ScheduledTask | Get-ScheduledTaskInfo | select *

Получение результата выполненной задачи планировщика

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

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

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

Получение результата выполненной задачи планировщика в GUI

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

# Коды, которые меня не интересуют (успешное выполнение)
$success_sc_codes = @(0, 267008, 267009, 267010, 267011, 267012)
# Получает объект, который содержит детальную информацию по всем процессам
$all_sc_tasks = Get-ScheduledTask | Get-ScheduledTaskInfo
foreach ($task in $all_sc_tasks){
   # Если код не соответствует тому что есть в массиве - выводим на экран
   if (!($task.LastTaskResult -in $success_sc_codes)){
      $task
   }
}

Поиск ошибок в планировщике задач

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

# Создаем пустой массив
$good_list = [System.Collections.ArrayList]@()
# Получаем существующие задачи
$all_sc_tasks = Get-ScheduledTask
foreach ($task in $all_sc_tasks){
   # Помещаем в созданный массив только имена
   $good_list.Add($task.TaskName) > Out-Null
}

Получение имен задач планировщика с Powershell

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

# Получаем список на другом компьютере
$all_sc_tasks = Get-ScheduledTask
foreach ($task in $all_sc_tasks){
   # Ищем имена, которые не соответствуют тому что есть в массиве
   if (!($task.TaskName -in $good_list)){
       $task
   }
}

Поиск устаревших задач планировщика с Powershell

Теги:

#powershell

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

Содержание:

  • Управление заданиями Task Scheduler с помощью PowerShell
  • Как создать задание планировщика с помощью PowerShell?
  • Получение информации и запуск заданий планировщика из PowerShell
  • Экспорт и импорт заданий планировщика в XML файл

Управление заданиями 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 командлеты из модуля ScheduledTasks

Совет. Ранее в Windows для создания и управления заданиями планировщика в основном использовались встроенная консольная утилита schtasks.exe.

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

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

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

$Trigger= New-ScheduledTaskTrigger -At 10:00am -Daily
$User= "NT AUTHORITYSYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:PSStartupScript.ps1"
Register-ScheduledTask -TaskName "StartupScript_PS" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force

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

создать задание планировщика с помощью Register-ScheduledTask

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

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

$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument “-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File C:PSStartupScript.ps1"

Совет. Если нужно, чтобы задание запускалось каждый раз при загрузке компьютера, первая строка должна быть такой:
$Trigger= New-ScheduledTaskTrigger -AtStartup

Если нужно выполнять задание при входе пользователя:
$Trigger= New-ScheduledTaskTrigger –AtLogo
n

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

консоль Task Scheduler с новым заданием планировщика

В версии Powershell 2.0 (Windows 7, Windows Server 2008 R2) для создания повторяющегося задания (ScheduledJob) из PowerShell необходимо воспользоваться COM интерфейсом Schedule.Service (либо обновите версию PowerShell). В этом примере мы создадим задание планировщика, которое во время запускает определённый файл с PowerShell скриптом во время загруки. Задание выполняется с правами системы (System).

$TaskName = "NewPsTask"
$TaskDescription = "Запуск скрипта PowerShell из планировщика"
$TaskCommand = "c:windowssystem32WindowsPowerShellv1.0powershell.exe"
$TaskScript = "C:PSStartupScript.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

LastRunTime : 4/6/2021 10:00:00 AM
LastTaskResult : 267011
NextRunTime : 4/7/2021 10:00:00 AM
NumberOfMissedRuns : 0
TaskName : CheckServiceState_PS
TaskPath : 
PSComputerName :

информация о запуске задания Get-ScheduledTaskInfo

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

Get-ScheduledTask CheckServiceState_PS | Disable-ScheduledTask

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

Get-ScheduledTask CheckServiceState_PS | Enable-ScheduledTask

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

Start-ScheduledTask CheckServiceState_PS

отключить/включить/запустить задание планировщика с помощью PowerShell

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

Unregister-ScheduledTask -TaskName CheckServiceState_PS

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

$task_user = New-ScheduledTaskPrincipal -UserId 'winitprokbuldogov' -RunLevel Highest
$task_settings = New-ScheduledTaskSettingsSet -Compatibility 'Win7'
Set-ScheduledTask -TaskName CheckServiceState_PS -Principal $task_user -Settings $task_settings

При появлении ошибки “Set-ScheduledTask : No mapping between account names and security IDs was done” проверьте, что у вас указано правильное имя пользователя.

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

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

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

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

Export-ScheduledTask "StartupScript_PS" | out-file c:tempStartupScript_PS.xml

Export-ScheduledTask - импорт задания планировщика в xml файла

Командлет Export-ScheduledTask не доступен в PowerShell 2.0. Поэтому в Windows 7 / 2008 R2 для экспорта настроек задания в XML файл лучше воспользоваться встроенной утилитой schtasks, вывод которой нужно перенаправить в текстовый файл:

schtasks /query /tn "NewPsTask" /xml >> "c:psNewPsTask.xml"

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

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

Register-ScheduledTask -Xml (Get-Content “\Server1publicNewPsTask.xml” | out-string) -TaskName "NewPsTask"

Примечание. В PowerShell 2.0 (Windows 7/Server 2008 R2) импорт задания также проще выполнить с помощью утилиты schtasks. Первая команда создаст новое задание. Вторая – сразу запустит его (не дожидаясь срабатывания триггера).

schtasks /create /tn "NewPsTask" /xml "\Server1publicNewPsTask.xml " /ru corpaaivanov /rp Pa$$w0rd
schtasks /Run /TN "NewPsTask"

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

I have one PowerShell script which sends emails. I want to execute that script automatically, every 1 minute. How can I do it, using task scheduler?

Currently I have created a task and provided the path of my script. But that scheduler opens my script, instead of executing.

I am using Windows 7 Professional and PowerShell version 2.0.5.

TylerH's user avatar

TylerH

20.5k62 gold badges75 silver badges97 bronze badges

asked May 30, 2014 at 11:50

AK47's user avatar

0

Create the scheduled task and set the action to:

Program/Script: Powershell.exe

Arguments: -File "C:UsersMyUserDocumentsThisisMyFile.ps1"

Ian Gregory's user avatar

Ian Gregory

5,7501 gold badge28 silver badges42 bronze badges

answered May 30, 2014 at 12:26

Kevin_'s user avatar

Kevin_Kevin_

2,7972 gold badges18 silver badges18 bronze badges

5

Here is an example using PowerShell 3.0 or 4.0 for -RepeatIndefinitely and up:

# Trigger
$middayTrigger = New-JobTrigger -Daily -At "12:40 AM"
$midNightTrigger = New-JobTrigger -Daily -At "12:00 PM"
$atStartupeveryFiveMinutesTrigger = New-JobTrigger -once -At $(get-date) -RepetitionInterval $([timespan]::FromMinutes("1")) -RepeatIndefinitely

# Options
$option1 = New-ScheduledJobOption –StartIfIdle

$scriptPath1 = 'C:Path and file name 1.PS1'
$scriptPath2 = "C:Path and file name 2.PS1"

Register-ScheduledJob -Name ResetProdCache -FilePath $scriptPath1 -Trigger  $middayTrigger,$midNightTrigger -ScheduledJobOption $option1
Register-ScheduledJob -Name TestProdPing -FilePath $scriptPath2 -Trigger $atStartupeveryFiveMinutesTrigger

Peter Mortensen's user avatar

answered May 30, 2014 at 12:02

JPBlanc's user avatar

JPBlancJPBlanc

69.2k16 gold badges131 silver badges170 bronze badges

2

Instead of only using the path to your script in the task scheduler, you should start PowerShell with your script in the task scheduler, e.g.

C:WINDOWSsystem32WindowsPowerShellv1.0powershell.exe -NoLogo -NonInteractive -File "C:PathToYourPS1File.ps1"

See powershell /? for an explanation of those switches.

If you still get problems you should read this question.

Peter Mortensen's user avatar

answered May 30, 2014 at 12:22

Ocaso Protal's user avatar

Ocaso ProtalOcaso Protal

18.7k8 gold badges77 silver badges82 bronze badges

1

In my case, my script has parameters, so I set:

Arguments: -Command "& C:scriptsmyscript.ps1 myParam1 myParam2"

Peter Mortensen's user avatar

answered Jan 6, 2017 at 17:34

Carlos Coelho's user avatar

Carlos CoelhoCarlos Coelho

5661 gold badge5 silver badges14 bronze badges

After several hours of test and research over the Internet, I’ve finally found how to start my PowerShell script with task scheduler, thanks to the
video Scheduling a PowerShell Script using Windows Task Scheduler by Jack Fruh @sharepointjack.

Program/script -> put full path through powershell.exe

C:WINDOWSsystem32WindowsPowerShellv1.0powershell.exe

Add arguments -> Full path to the script, and the script, without any » «.

Start in (optional) -> The directory where your script resides, without any » «.

Peter Mortensen's user avatar

answered Sep 14, 2016 at 12:09

Mickael Pilote's user avatar

0

You can use the Unblock-File cmdlet to unblock the execution of this specific script. This prevents you doing any permanent policy changes which you may not want due to security concerns.

Unblock-File path_to_your_script

Source: Unblock-File

Peter Mortensen's user avatar

answered Apr 30, 2018 at 13:41

AlexeyGy's user avatar

AlexeyGyAlexeyGy

3063 silver badges9 bronze badges

None of posted solutions worked for me.
Workaround, which worked:

create a run.bat and put inside
powershell.exe -file "C:...script.ps1"

then set Action to Program/Script: "C:...run.bat"

answered Feb 14, 2020 at 15:00

bucky's user avatar

buckybucky

3744 silver badges18 bronze badges

Profile picture for user Олег

code

Системному администратору часто приходится писать разные скрипты и настраивать их запуск по расписанию в Планировщике заданий (Task Scheduler). Простой пример ниже.

Написал небольшой скрипт и сохранил по адресу:

B:scriptsweburl_status.ps1

Я хочу, чтобы этот скрипт запускался каждые 10 минут. Время работы скрипта — не более 60 секунд.

Открываю Планировщик заданий. Создаю попку, в которой будет находиться расписание, называю её IIS.

powershell

Нажимаю Create Task.

powershell

В первой вкладке General указываю:

  • Name. Любое название расписания.
  • Description. Любое описание, не обязательно.
  • С помощью кнопки Change User or Group можно выбрать пользователя, от имени которого будет выполняться скрипт. Я выбираю локального администратора.
  • Run whether user is logged on or not. Устанавливаю радиокнопку, чтобы скрипт выполнялся независимо от того, залогинен пользователь или нет. В этом случае нас попросят после сохранения расписания указать пароль пользователя.
  • Run with highest privileges. Устанавливаю галку для запуска скрипта с правами администратора.

powershell

Перехож на вкладку Triggers. Здесь нужно создать триггер для расписания. New.

powershell

В настройках триггера:

  • Begin the task. Выбираю On a schedule. Запуск по расписанию.
  • Daily. Запускать каждый день.
  • Recur every 1 days. Каждый день без пропусков.
  • Repeat task every 10 minutes. Запускать каждые 10 минут for a duration 1 day. Весь день.
  • Stop tasks if it runs longer than 5 minutes. Останавливать задачу, если она выполняется более 5 минут.
  • Enabled. Включить расписание.

OK.

powershell

Расписание создано.

powershell

Перехожу на вкладку Actions. Здесь нужно указать скрипт для выполнения. New.

powershell

  • Actions: Start a program. Выполнить программу.
  • Program/script. Указываю powershell.exe
  • Add arguments (optional). Здесь нужно указать параметры для запуска скрипта. Я пишу: -file «B:scriptsweburl_status.ps1». Если нужно передать в скрипт аргументы, то можно написать -command «& {B:scriptsweburl_status.ps1 -a 1 -b 3}».

OK.

powershell

Путь к выполняемому скрипту указан.

powershell

Перехожу на вкладку Conditions. Здесь определяются условия для запуска. Устанавливаю одну галку, просто на всякий случай:

  • Wake the computer to run this task. Разбудить компьютер для выполнения скрипта.

powershell

Перехожу на вкладку Settings. Здесь есть ряд полезных настроек. Ставлю галки:

  • Allow task to be run on demand. Разрешить запуск скрипта по запросу.
  • If the running task does not end when requested, force it to stop. Если задача не завершилась к моменту повторного запуска, то остановить её.
  • Do not start a new instance. Не запускать второй экземпляр.

OK.

powershell

Указываю пароль локального администратора. OK.

powershell

Теперь скрипт будет запускаться по расписанию. В разделе History можно отслеживать результат выполнения.

  • 23.08.2020
  • 38 520
  • 11
  • 14
  • 13
  • 1

Планировщик задач (Task Scheduler)

  • Содержание статьи
    • Введение
    • Создание задачи
    • Дополнительные настройки
    • Примеры настройки Планировщика
      • Ежедневный запуск задачи
      • Запуск задачи через день
      • Отложенный ежедневный запуск задачи
      • Ежедневный запуск задачи до определенной даты с последующим удалением задачи из Планировщика
      • Запуск задачи в разные дни недели в разное время
      • Ежеминутный запуск задачи в рабочее время в рабочие дни
      • Ежемесячный запуск задачи
    • Тестовый запуск задачи
    • Управление заданиями Планировщика задач по сети
    • Комментарии к статье ( 11 шт )
    • Добавить комментарий

Введение

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

Планировщик будет незаменимым и удобным инструментом если необходимо запускать какие-то приложения, которые выполняют рутинные операции и не требуют присутствия пользователя. Это могут быть операции резервного копирования, обновления данных, дефрагментация и т.д.

На примере будет показано создание задания со сложным расписанием запуска. Статья содержит массу скриншотов с подробными описаниями.

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

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

Чтобы убедиться, что сервис запущен, зажмите поочередно клавиши Win + R, и в открывшемся окошке «Выполнить», нужно набрать команду services.msc и нажать кнопку «ОК». Откроется окно, показанное на рисунке 1.

Рисунок 1.

Найдите службу «Планировщик заданий» и убедитесь, что в столбце «Состояние» у нее «Выполняется» («Работает» в старых версиях Windows), а в столбце «Тип запуска» — «Автоматически». Если это не так, то дважды щелкните по имени службы и в открывшемся окне скорректируйте значения на те, которые указаны выше (для этого нужно иметь привилегии администратора, т. е. Ваша учетная запись должна быть из группы Администраторы).

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

Теперь создадим задачу.

Для этого, опять поочередно зажмем клавиши Win + R, и введем команду taskschd.msc, после чего нажмем «ОК». Откроется окно, показанное на рисунке 2.

Рисунок 2.

В правой панели данного окна нажмем на «Создать задачу…». Откроется окно, показанное на рисунке 3.

Рисунок 3.

В поле «Имя» нужно указать название этого задания, которое будет отображаться в окне Планировщика. Название может быть любым. Присвойте заданию такое имя, чтобы потом, при открытии Планировщика, можно было сразу вспомнить, что делает это задание. В данном примере я назвал задание «Тестирование Планировщика». После этого, нажимаем «Далее». Откроется окно, показанное на рисунке 4.

Рисунок 4.

Здесь нужно выбрать период запуска этого задания. Возможны следующие варианты:

  • Ежедневно. Задание будет запускаться ежедневно, либо только по рабочим дням, либо через несколько дней в указанное время. Все эти параметры можно будет выбрать в следующем окне, о чем пойдет речь ниже.
  • Еженедельно. В следующем окне можно будет указать каждую ли неделю нужно запускать задание и выбрать дни недели, по которым задание будет запущено в определенное время.
  • Ежемесячно. Далее можно будет указать в какие месяцы года надо запускать задание и выбрать по каким числам месяца или по каким дням месяца в определенное время задание будет запущено.
  • Однократно. В следующем окне мастера можно будет выбрать дату и время запуска задания. Больше это задание выполняться не будет.
  • При загрузке компьютера. Следующего окна при выборе этого варианта нет, что логично, т.к. при таком типе запуска задание будет выполняться каждый раз при загрузке компьютера. Данный тип запуска не требует входа пользователя, задание будет запущено от имени того пользователя, которое будет нужно указать в следующем окне.
  • При входе в Windows. Этот тип запуска похож на предыдущий с тем отличием, что задание будет выполнено только когда пользователь войдет в Windows, т.е. введет свои логин и пароль.

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

Рисунок 5.

Ежедневно

При ежедневном типе запуска есть возможность выбора запускать ли задание ежедневно, либо запускать задание с периодичностью, например, один раз в три дня. В этом же окне нужно выбрать время запуска задания. Поле «Начать» позволит отложить первый запуск задания до определенной даты, т.е. если сегодня первое число месяца, а «Начать» установлена на 10-е, то задача начнет выполняться с десятого числа, не смотря на то, что ее запуск запланирован как ежедневный.

Рисунок 6.

Еженедельно

При еженедельном типе запуска есть возможность запускать задачу по определенным дням недели, отметив галками соответствующие дни недели в окне, показанном на рисунке 7. Можно указать, что задание должно выполняться через неделю, т.е., например, первую неделю в понедельник, среду и пятницу, вторую неделю задание не выполняется, в третью выполняется в понедельник, среду, пятницу, четвертую не выполняется и т.д. Также, нужно указать время, в которое задание будет выполняться в указанные дни недели.

Рисунок 7.

Ежемесячно

При ежемесячном типе запуска задания необходимо отметить месяца, по которым будет запускаться задание и указать число, когда задание будет запущено. Обратите внимание на то, что последнее число месяца может быть 28-е, 29-е, 30-е или 31-е, поэтому, если задание необходимо выполнить в конце месяца, то его запуск лучше запланировать на первое число следующего месяца в 00:01. Если есть необходимость не указывать конкретное число для запуска задания, а запускать его только, например, по третьим пятницам указанных месяцев, то можно переключить соответствующий переключатель и выбрать из полей со списками требуемые значения.

Рисунок 8.

Однократно

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

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

При входе в Windows
Такое задание будет выполняться при логоне пользователя.


Выберите наиболее подходящее под требования к периодичности запуска расписание, даже если оно не полностью соответствует необходимому. Например, если задачу необходимо выполнять по рабочим дням в 21:00, а по выходным — в 19:00, то на этом этапе создания задачи следует выбрать еженедельный запуск задачи, а после ее создания скорректировать расписание нужным образом. Пример такой настройки показан на рисунке 10.

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

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

Рисунок 9.

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

  • Запустить программу — будет выполнен указанный файл. Ограничений на формат файла нет, это может быть как исполняемый файл, так и какой-нибудь пакетный (bat, cmd и т. д.), или вообще любой другой.
  • Отправить сообщение электронной почты — в Windows 10 не получится создать задачу с таким действием.
  • Вывести сообщение — в Windows 10 не получится создать задачу с таким действием.

Выбрав действие «Запустить программу», и нажав Далее, увидим показанное на рисунке 10 окно.

Рисунок 10.

В этом окне надо выбрать программу, которая будет запускаться Планировщиком, её надо найти при помощи кнопки Обзор. Для примера я создал на диске С папку Scheduler и поместил в нее пакетный файл test.bat, в котором находится последовательность команд, которые надо запускать в определенное время. Нажав кнопку Обзор найдите файл, который будет запускать Планировщик и нажмите Открыть. Если все сделано правильно, то мастер создания нового задания выведет следующее окно, показанное на рисунке 11.

Рисунок 11.

Если проделанные ранее действия полностью удовлетворяют Вашим требованиям, то после нажатия кнопки Готово в окне, показанном на рисунке 13, создание будет завершено и в окне Планировщик заданий, в разделе «Библиотека планировщика заданий» появится вновь созданное задание. Если расписание запуска задачи требует дальнейшей, более тонкой донастройки, то отметьте пункт «Открыть окно Свойства для этой задачи после нажатия кнопки Готово» и нажмите кнопку Готово. В этом случае, будет открыто окно для настройки дополнительных возможностей расписания запуска задачи, которые подробно будут рассмотрены в следующей главе.

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

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

Рисунок 12.

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

  • Имя — Имя задания, под которым оно отображается в Планировщике задач.
  • Размещение — Расположение задачи в древовидной структуре планировщика задач. В данном случае «» обозначает, что задача расположена в корне древа.
  • Автор — Имя пользователя, создавшего задачу.
  • Описание — Текстовое описание задачи.
  • При выполнении задачи использовать следующую учетную запись пользователя — Имя пользователя, под которым будет выполнятся задача.
  • Выполнять только для пользователей, вошедших в систему — Если установить данный чекбокс, то данная задача будет выполнятся только при наличии залогиненного пользователя.
  • Выполнять для всех пользователей — Данная задача будет выполнятся вне зависимости от наличия залогиненного пользователя.
  • Выполнять с наивысшими правами — Для выполнения задачи будет предоставлены права администратора.

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

Рисунок 13.

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

Рисунок 14.

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

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

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

Рисунок 15.

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

Рисунок 16.

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

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

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

Рисунок 17.

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

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

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

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

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

Рисунок 18.

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

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

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

Рисунок 19.

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

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

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

Рисунок 20.

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

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

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

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

Рисунок 21.

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

Рисунок 22.

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

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

Рисунок 23.

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

Рисунок 24.

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

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

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

Рисунок 25.

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

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

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

Рисунок 26.

Запуск задачи запланирован на первую минуту нового месяца. Это связано с тем, что в месяце может быть 28, 29, 30 или 31 день. Чтобы не создавать для каждого месяца свое расписание логичнее выполнять задачу первого числа каждого месяца.

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

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

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

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

Рисунок 27.

При удачном прохождении тестового запуска задачи, в главном окне Планировщика, в столбце «Результат прошлого запуска» появится значение 0х0. Это говорит о том, что запуск задачи был успешным. Если запуск задачи по каким-то причинам не удался, то в столбце «Результат прошлого запуска» будет стоять другое значение — 0x1. Помочь узнать причину незапуска задачи может журнал задачи, но перед этим его нужно включить. Для этого, нужно в правой колонке окна Планировщика задач найти пункт «Включить журнал всех заданий».

Рисунок 28.

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

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

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

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

Рисунок 29.

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

Рисунок 30.

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

Понравилась статья? Поделить с друзьями:
  • Как добавить скрипт в автозагрузку windows 10
  • Как добавить скрипт в path windows
  • Как добавить телевизор в домашнюю сеть через wifi windows 10
  • Как добавить скорость интернета на компьютере windows 7
  • Как добавить текст на рабочий стол windows 10