microsoft-windows:windows-server-2012-r2:adds:how-to-use-managed-service-accounts-msa-and-group-managed-service-account-gmsa:how-to-create-a-windows-scheduler-task-on-behalf-of-msa-gmsa-in-powershell
Содержание
Как создать задание Планировщика Windows Task Scheduler от имени учётной записи MSA/gMSA в PowerShell
Графическая оболочка Планировщика заданий Windows Task Scheduler в ОС Windows Server 2012 R2 не умеет работать с учётными записями MSA/gMSA. Однако для настройки задания планировщика Windows, которое должно выполняться от имени сервисной учётной записи MSA/gMSA, мы можем воспользоваться возможностями оболочки PowerShell.
Создание простого задания
Запустим оболочку PowerShell с правами Администратора и создадим простое задание планировщика Windows для запуска некоторого PS-скрипта с ежедневным выполнением, например в 23:00:
$Action = New-ScheduledTaskAction -Execute "PowerShell.exe" ` -Argument "-NoProfile -command `"D:FBInst1ToolsFBBases-Backup.ps1`"" $Trigger = New-ScheduledTaskTrigger -Daily -At 23:00 $SvcUser = New-ScheduledTaskPrincipal -UserID KOMs-S11$ -LogonType Password Register-ScheduledTask -TaskName "Firebird DBs (Instance1) Backup" ` -Action $Action -Trigger $Trigger -Principal $SvcUser
Откроем графическую консоль управления планировщиком Windows и проверим корректность созданного задания.
Изменение созданного задания
В случае необходимости изменения созданного задания с использованием учётной записи MSA/gMSA не нужно пытаться изменить здание через графическую консоль, так как это приведёт к запросам аутентификации для учётной записи gMSA и ошибкам сохранения задания. Изменить созданное задание можно с помощью PowerShell. Например, чтобы изменить время запуска задания можем выполнить следующий код:
$Trigger = New-ScheduledTaskTrigger -Daily -At 23:05 Set-ScheduledTask -TaskName "Firebird DBs (Instance1) Backup" -Trigger $Trigger
Задания со сложным расписанием
Рассмотрим ещё один пример создания задачи планировщика, но уже с более сложным расписанием выполнения. Например, нам нужно, чтобы задание выполнялось дважды в день в определённое время. В этом случае в качестве значения триггера используется массив объектов, созданных командлетом New-ScheduledTaskTrigger. Например, задача, выполняемая ежедневно утром и вечером в определённое время может быть создана так:
$Action = New-ScheduledTaskAction -Execute "C:ProgrammsMyProgramm.exe" $Trigger = @( $(New-ScheduledTaskTrigger -Daily -At 8:30), $(New-ScheduledTaskTrigger -Daily -At 20:30) ) $SvcUser = New-ScheduledTaskPrincipal -UserID DOMAINgMSAAccount$ -LogonType Password $TDescription = 'Описание моей задачи' Register-ScheduledTask -TaskName "My Task" -TaskPath "My Tasks" -Action $Action ` -Trigger $Trigger -Principal $SvcUser -Description $TDescription
Если требуется постоянный цикличный запуск задания, например, каждые 5 минут, то значение триггера можно задать следующим образом:
$Trigger = New-ScheduledTaskTrigger ` -Once ` -At (Get-Date) ` -RepetitionInterval (New-TimeSpan -Minutes 5) ` -RepetitionDuration ([System.TimeSpan]::MaxValue)
Ещё один пример указания триггера с условием, что задание должно выполняться в определённое время, но только по рабочим дням недели:
$Trigger = New-ScheduledTaskTrigger -Weekly ` -DaysOfWeek Monday,Tuesday,Wednesday,Thursday,Friday -At 9:10
Триггер -AtStartup
При создании заданий Планировщика с триггером по запуску ОС (-AtStartup) может потребоваться дополнительно установить в свойствах триггера небольшую задержку по времени для того, чтобы дать возможность завершения инициализации механизмов доменной аутентификации. Пример такой настройки рассмотрен здесь.
# Добавляем в первый триггер задания Планировщика 3-минутную задержку перед запуском # А также отключаем ограничение времени выполнения задания # Формат указания длительности времени https://en.wikipedia.org/wiki/ISO_8601#Durations # $Task.Triggers[0].Delay = "PT3M" $Task.Settings.ExecutionTimeLimit = "PT0S" $Task | Set-ScheduledTask
Проверено на следующих конфигурациях:
Версия ОС |
---|
Windows Server 2012 R2 Standard EN (6.3.9600) |
Автор первичной редакции:
Алексей Максимов
Время публикации: 06.06.2019 20:51
· Последнее изменение: 13.10.2019 14:02 —
Алексей Максимов
Имеем Windows Server 2012 R2. Задача — автоматически перезагружать сервер каждый понедельник в 5 утра. Приступаем.
Запускаем Планировщик заданий, создаём в нём папку «reboot»:
Делаем Create Basic Task… Запускается мастер:
Указываем Name, Description:
Кликаем Next:
Выбираем период Weekly. Next:
Указываем начало — ближайший понедельник 5 утра. Ставим галку Monday. Next:
Выбираем Start a program. Next:
В Program/script: пишем:
%SYSTEMROOT%System32shutdown.exe
В Add arguments (optional):
/r /f /t 90 /d p:0:0 /c "Перезапуск по понедельникам. Отмена: shutdown.exe /a"
Где:
- /r — перезагрузка,
- /f — принудительное закрытие всех приложений,
- /t 90 — время ожидания до начала перезагрузки 90 сек,
- /d p:0:0 — причины перезагрузки для журнала. В данном случае, мы указали: p — запланированная перезагрузка, 0:0 — «Other (planned)»,
- /c комментарий в свободной форме длинной не более 512 символов. Комментарий будет показываться юзерам 90 секунд. За это время можно отменить перезагрузку командой shutdown.exe /a.
Список параметров и причин перезагрузки можно посмотреть shutdown.exe /?
Мастер не доделали, кликаем Finish. Создаётся задача — редактируем её.
Ставим Run whether user is logged on or not. Добавим галку Run with highest privileges. Ok:
Нас попросят ввести имя пользователя, от имени которого будет выполняться задание. И пароль. Готово:
Сам пока не проверял результатов. В ближайший понедельник посмотрим…
P.S.
Две недели прошло — шедулер нормально перезагружает сервер по понедельникам.
Содержание
- Перезагрузка Windows по расписанию
- Планировщик задач, перезагрузка ПК по расписанию.
- В Windows XP :
- В Windows 7 :
- В Windows 8 :
- Создаём Простую задачу:
- Перезагрузка сервера через командную строку и планировщик задач
- Перезагрузка Windows сервера планировщиком заданий
- ИТ База знаний
- Полезно
- Навигация
- Серверные решения
- Телефония
- Корпоративные сети
- Как перезагрузить Windows Server 2016
- Перезагрузить Windows Server через графический интерфейс
- Как перезагрузить Windows Server с помощью командной строки
- Шаг 1: Откройте командную строку
- Шаг 2. Перезагрузите операционную систему Windows Server.
- Перезапуск из PowerShell
- Шаг 1. Запустите PowerShell
- Шаг 2: перезагрузите систему
- Перезагрузка удаленного сервера Windows с помощью PowerShell
- Шаг 1. Запустите PowerShell
- Шаг 2. Перезагрузитесь удаленно
Перезагрузку Windows сервера или настольного персонального компьютера по расписанию можно реализовать средствами встроенного компонента Microsoft Winodows — планировщика заданий, возможности которого позволяют производить запуск скриптов или программ в заданные моменты времени. Функционально и внешне компонент не имеет никаких отличий в разных версия операционной системы и алгоритм взаимодействия универсален.
Запускаем планировщик заданий любым удобным способом. Например, находим в панели управления или при нажатии сочетания клавиш Пуск+R, вводим в строку taskschd.msc или щелкаем правой кнопкой на меню Пуск и выбираем «Управление компьютером».
Создаем простую задачу. Обязательными полями для заполнения являемся Имя, а поле Описание опционально, заполните его при необходимости.
Определяемся с желаемым графиком запуска нашей задачи автоматической перезагрузки компьютера. Мастер довольно гибко позволяем настроить время и интервалы выполнения (ежедневно, еженедельно, ежемесячно).
Дальше выбираем «Запустить программу» в качестве действия для задачи. Финальным аккордом указываем приложение shutdown.exe используемое в операционной системе как утилита для выключения, перезагрузки или завершения сеанса пользователя.
Обязательно добавляем аргументы для достижения правильного результата. Ключевыми значениями для нас являются /r — перезагрузка, /f — принудительное закрытие всех приложений. Подробнее можно ознакомиться и подобрать аргументы в справочном материале.
Завершаем настройку и ждем время указанное в графике для проверки результата.
Источник
Планировщик задач, перезагрузка ПК по расписанию.
В Windows XP :
Пуск – Панель управления – ярлык “Назначенные задания”
Пуск – Все программы – Стандартные – Служебные – Назначенные задания
В Windows 7 :
Пуск – Панель управления – Администрирование – Расписание выполнения задач
Пуск – Все программы – Стандартные – Служебные – Планировщик заданий
В Windows 8 :
Пуск – Панель управления – Администрирование – Расписание выполнения задач
Заходим в планировщик задач:
Зажимаем Пуск+R, вводим в строку
Создаём Простую задачу:
Вводим Имя задачи, жмём Далее.
Оставляем галочку на Ежедневно и жмём Далее.
Далее вписываем нужное Время для перезагрузки и жмём Далее.
Оставляем галочку на Запустить программу, снова жмём Далее.
В поле Программа или сценарий вводим
в поле Добавить аргументы вводим -r и снова давим Далее, и Готово.
Для повторения задачи каждые N часов надо проделать эти действия сколько
нужна устанавливая разное время.
Также для автоматического выключения ПК надо проделать тот же путь,
только в поле Добавить аргументы вводим -s.
Источник
Перезагрузка сервера через командную строку и планировщик задач
Иногда сервера необходимо перезагружать, например, для установки обновлений. В рабочее время, зачастую, сделать это не возможно по причине того, что пользователи работают с сервером и прерывать их работу не вариант. Конечно, можно или задержаться на работе или прийти раньше для выполнения перезагрузки… Но гораздо проще и удобнее запланировать перезагрузку через диспетчер задач.
Для начала рассмотрим, как перезагрузить (или выключить) систему через командную строку. В этом нам поможет утилита shutdown.exe. Не будем рассматривать все возможные параметры использования, их можно посмотреть запустив программу из консоли с параметром /? или просто без параметра, рассмотрим набор параметров, который использую я.
shutdown.exe /r /f /t 90 /d p:2:16 /c «Перезапуск для установки обновлений»
/r — перезагрузка сервера
/f — принудительное закрытие всех приложений.
/t 90 — время ожидания до начала перезагрузки 90 сек.
/d p:2:16 — указание причины перезагрузки, которая отобразиться в системном журнале. В данном случае, мы указали:
p — запланированная перезагрузка, 2:16 — «Операционная система: Установка пакета обновления (Запланировано)»
/c «Перезапуск для установки обновлений» — комментарий в свободной форме длинной не более 512 символов.
Итак, после выполнения данной строки на экране появится окно с указанным нами комментарием.
Пока идет указанное нами время ожидания, есть возможность прервать запуск перезагрузки в случае необходимости выполнив shutdown.exe /a в командной строке.
После окончания времени ожидания станция будет перезагружена. При этом в системный журнал попадет запись о перезагрузке, ее причинах и нашим комментарием.
Таким образом, если за серверами следят несколько Администраторов, у них не будет вопросов почему сервер перезагружался.
Для того чтобы запланировать перезагрузку, разумно использовать планировщик задач. Не буду здесь описывать как создавать в нем задачи, отмечу только, что параметры командной строки следует вынести в соответствующую строчку, как на скриншоте
Обратите внимание, что путь я преобразовал через системную переменную:
Таким образом, не важно на какой диск установлена система, программа запустится.
Созданную задачу можно устанавливать на определенные дату/время с повторением или без по вашему желанию. Система будет перезагружена в назначенное время и в системном журнале останется соответствующая запись.
Разумеется, вы можете экспортировать созданную задачу в xml-файл и использовать как шаблон при создании подобной задачи на другом сервере вашей сети.
Следует также отметить, что таким же образом можно перезагрузить (или выключить) удаленный компьютер, если использовать параметр /m ИМЯ_КОМПЬЮТЕРА.
Утилита Shutdown имеет и оконный интерфейс, для этого утилиту следует запустить с ключом /i
Данный диалог позволяет выполнить перезагрузку на компьютерах сети (AD) без использования командной строки.
Источник
Перезагрузка Windows сервера планировщиком заданий
Запускаем Планировщик заданий, создаём в нём папку «reboot»:
Делаем Create Basic Task. Запускается мастер:
Указываем Name, Description:
Выбираем период Weekly. Next:
Выбираем Start a program. Next:
В Program/script: пишем:
В Add arguments (optional):
Список параметров и причин перезагрузки можно посмотреть shutdown.exe /?
Ставим Run whether user is logged on or not. Добавим галку Run with highest privileges. Ok:
Нас попросят ввести имя пользователя, от имени которого будет выполняться задание. И пароль. Готово:
Сам пока не проверял результатов. В ближайший понедельник посмотрим.
Источник
ИТ База знаний
Полезно
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Как перезагрузить Windows Server 2016
Когда сервер Windows работает в течение длительного периода времени, приложения и функции операционной системы могут работать нестабильно. Нестабильная операционная система может иметь сбои приложений, зависание приложений или утечки памяти. Иногда даже важные системные функции перестают отвечать.
Онлайн курс по Linux
Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps
Простым решением является перезагрузка. В этом руководстве вы узнаете, как перезапустить Windows Server 2016 с несколькими параметрами команды.
Перезагрузить Windows Server через графический интерфейс
Интерфейс Windows Server 2016 представляет собой графический интерфейс, который упрощает многие задачи.
Как перезагрузить Windows Server с помощью командной строки
В некоторых случаях у вас может не быть установлен компонент GUI. Или ваша операционная система столкнулась с проблемой, и все, что вы можете получить доступ, это командная строка.
Шаг 1: Откройте командную строку
Шаг 2. Перезагрузите операционную систему Windows Server.
В окне командной строки введите команду перезагрузки Windows Server и нажмите клавишу Enter:
Параметр –r заставляет Windows перезагружаться, а не просто выключаться.
Перезапуск из PowerShell
Шаг 1. Запустите PowerShell
Шаг 2: перезагрузите систему
В окне PowerShell введите следующую команду и нажмите Enter:
По умолчанию вы получите 5-секундный обратный отсчет, затем система перезагрузится. Вы можете добавить опцию, чтобы отложить перезапуск на более чем 5 секунд по умолчанию:
Перезагрузка удаленного сервера Windows с помощью PowerShell
Шаг 1. Запустите PowerShell
Если вы находитесь в командной строке, введите команду:
Подсказка добавит PS в начале, и ваши набранные команды должны появиться в желтом цвете.
Шаг 2. Перезагрузитесь удаленно
В окне PowerShell введите следующее:
Замените NAME_OF_SYSTEM на имя компьютера, который вы хотите перезагрузить. Не забудьте поставить кавычки.
Примечание. Предполагается, что ваши текущие учетные данные те же, что и для удаленной системы. Обычно это может выглядеть как имя пользователя администратора, и один и тот же пароль для обеих систем. Это также может работать, если обе системы находятся в одном домене, а ваша учетная запись пользователя имеет соответствующие разрешения.
Источник
- Remove From My Forums
-
Question
-
I have three questions about Task Scheduler on Windows 2012 R2 and I hope someone would educate me, thx
1. How do I enable History? by default, it is disabled. It says online that select a task scheduler, in Actions, enable all history, but no such item ‘Enable History’ in any drop-down menu in Task Scheduler.
2. I schedule a ps1 script to copy file from local to remote server and it got error 0x103! Is there a site at Microsoft that lists all the error code for windows 2012 r2 task scheduler? I don’t have much luck looking for that!
3. What Event ID would be for Task Scheduler?
Thank you,
Thang Mo
Answers
-
Hi ThangMo,
In Server 2012r2 the Task Scheduler history is enabled by default, you can also use cmdlet to check the schedule task history, we can get the event ID same through the Task
Scheduler task pane.Schtasks /Query /FO LIST /V
The related KB:
View Task Properties and History
https://technet.microsoft.com/en-us/library/cc722006.aspx?f=255&MSPPError=-2147217396
I’m glad to be of help to you!
Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Support, contact tnmff@microsoft.com
-
Proposed as answer by
Monday, April 13, 2015 3:27 AM
-
Marked as answer by
Alex Lv
Wednesday, April 22, 2015 9:31 AM
-
Proposed as answer by
- Remove From My Forums
-
Question
-
I have three questions about Task Scheduler on Windows 2012 R2 and I hope someone would educate me, thx
1. How do I enable History? by default, it is disabled. It says online that select a task scheduler, in Actions, enable all history, but no such item ‘Enable History’ in any drop-down menu in Task Scheduler.
2. I schedule a ps1 script to copy file from local to remote server and it got error 0x103! Is there a site at Microsoft that lists all the error code for windows 2012 r2 task scheduler? I don’t have much luck looking for that!
3. What Event ID would be for Task Scheduler?
Thank you,
Thang Mo
Answers
-
Hi ThangMo,
In Server 2012r2 the Task Scheduler history is enabled by default, you can also use cmdlet to check the schedule task history, we can get the event ID same through the Task
Scheduler task pane.Schtasks /Query /FO LIST /V
The related KB:
View Task Properties and History
https://technet.microsoft.com/en-us/library/cc722006.aspx?f=255&MSPPError=-2147217396
I’m glad to be of help to you!
Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Support, contact tnmff@microsoft.com
-
Proposed as answer by
Monday, April 13, 2015 3:27 AM
-
Marked as answer by
Alex Lv
Wednesday, April 22, 2015 9:31 AM
-
Proposed as answer by
Большинство пользователей и администраторов привыкли использовать графический интерфейс консоли 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
Совет. Ранее в Windows для создания и управления заданиями планировщика в основном использовались встроенная консольная утилита schtasks.exe.
Как создать задание планировщика с помощью PowerShell?
В современных версиях PowerShell (начиная с PowerShell 3.0 в Windows Server 2012/Windows для создания заданию планировщика нужно использовать командлеты 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.
Теперь ваш 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 появилось новое задание планировщика.
В версии 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-ScheduledTask CheckServiceState_PS | Disable-ScheduledTask
Чтобы включить задание:
Get-ScheduledTask CheckServiceState_PS | Enable-ScheduledTask
Чтобы запустить задание немедленно (не дожидаясь расписания), выполните:
Start-ScheduledTask CheckServiceState_PS
Чтобы полностью удалить задание из 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” проверьте, что у вас указано правильное имя пользователя.
Экспорт и импорт заданий планировщика в XML файл
С помощью PowerShell можно экспортировать любое задания планировщика в текстовый XML файл для распространения на другие компьютеры. Вы можете экспортировать задание из графического интерфейса Task Scheduler или из консоли PowerShell.
Следующая команда экспортирует задание StartupScript_PS в файл StartupScript_PS.xml:
Export-ScheduledTask "StartupScript_PS" | out-file c:tempStartupScript_PS.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"
Обратите внимание, что в этом примере указаны данные учетной записи, из-под которой будет запускаться задание. Если имя и пароль учетной записи не указаны, то т.к. они не хранятся в задании, они будут запрошены при импорте.
Каждому системному администратору Windows приходилось создавать задания планировщика из графической консоли Task Scheduler. Это довольно простая и тривиальная задача. В этой небольшой статье мы рассмотрим, как создавать задания планировщика с помощью команд PowerShell.
Предположим, нам нужно создать задачу, которая будет запускать определённый скрипт PowerShell каждый понедельник и четверг в 11:00.
Для создания нового задания мы воспользуемся командлетами модуля PSScheduledJob. Чтобы этот командлет работал в Windows 7, нужно установить как минимум PowerShell версии 3.0.
Запустим консоль Powesrhell с правами администратора и импортируем модуль PSScheduledJob.
Import-Module PSScheduledJob
Создадим новый триггер:
$Trigger = New-JobTrigger -Weekly -DaysOfWeek 1,4 -At 11:00PM
Теперь создадим новое задание с именем BackupDBTask и привяжем к нему созданный ранее триггер:
Register-ScheduledJob -Name BackupDBTask -FilePath "C:psbackupdb.ps1" -Trigger $Trigger
Задание планировщика создано. Найти его в графической консоли Task Scheduler можно в разделе: Task Scheduler -> Task Scheduler Library -> Microsoft->Windows ->PowerShell -> SheduledJobs.
При создании нового задания PowerShell генерирует новый xml файл, который содержит определение задания. Найти этот файл можно в профиле текущего пользователя:
%USERPROFILE%AppDataLocalMicrosoftWindowsPowerShellScheduledJobsBackupDBTask
В дальнейшем данный xml файл можно использовать для импорта настроек задания на других компьютерах. Импорт (создание задания с настройками из xml) выполняется такой командой:
Register-ScheduledTask -Xml (Get-Content '\srv1ScheduledJobDefinition.xml' | out-string) -TaskName "BackupDBTask"
В каталоге Output хранится история запуска задания.
В Windows 8 / Windows Server 2012 и выше (в этих версиях появился встроенный PowerShell 3.0) при создании задания планировщика импортировать модуль PSScheduledJob не нужно.
Просто создайте новый триггер:
$Trigger = New-JobTrigger -Weekly -DaysOfWeek 1,4 -At 08:00PM
Если нужно запускать задание от определенного пользователя, нужно получить его пароль (он будет сохранен в менеджере паролей, что конечно, не очень безопасно):
$credent = Get-Credential contososerver-admin1
Чтобы задание запускалось с повышенными правами, включим флаг RunElevated:
$elevat = New-ScheduledJobOption –RunElevated
Теперь создадим новое задание
Register-ScheduledJob -Name BackupDBTask2 -FilePath C:psbackupdb.ps1 -Trigger $Trigger -Credential $credent –ScheduledJobOption $elevat
Совет. Чтобы запускать задание под учетной записью системы (Local System), используйте следующий формат команды создания задачи:
Register-ScheduledJob -Name BackupDBTask2 -FilePath C:psbackupdb.ps1 -Trigger $Trigger -User «System» –ScheduledJobOption $elevat
Получить информацию о всех включенных заданиях в разделе MicrosoftWindowsPowershell можно так:
Get-ScheduledTask -TaskPath MicrosoftWindowsPow*| ? state -ne Disabled
Чтобы получить информацию о конкретном задании, выполните:
Get-ScheduledTask BackupDBTask| Get-ScheduledTaskInfo
Чтобы отключить определенную задачу:
Get-ScheduledTask BackupDBTask| Disable-ScheduledTask