powershell-task-scheduler

Без сомнения PowerShell на данный момент самый удобный и прогрессивный язык программирования под Windows. Он по умолчанию встроен во все современные операционные системы Microsoft, позволяет нативно использовать все классы .NET. Так же поддержка его по умолчанию добавляется во все решения от Microsoft. Можно довольно долго говорить о его достоинствах, но из-за высоких настроек безопасности по умолчанию, использовать готовые скрипты не получится. В этой статье я напишу, как начать использовать скрипты в домене Windows 2008.

По умолчанию, в любой операционной системе Микрософт в PowerShell запрещен запуск любых скриптов, в этом можно убедиться вы полнив следующую команду: Get-ExecutionPolicy.

 С настройками по умолчанию данная команда вернет значение “Restricted”.

Для того, чтобы иметь возможность запускать скрипты, нужно установить значение данной настройки в “AllSigned”.  А для этого нужно:

  • или на локальной машине с правами администратора выполнить команду Set-ExecutionPolicy AllSigned
  • или, установив расширение GPO, накатить политику на нужную вам группу машин (http://www.microsoft.com/downloads/en/details.aspx?FamilyID=2917a564-dbbc-4da7-82c8-fe08b3ef4e6d&displaylang=en)

Подробнее о политиках можно почитать, выполнив команду Get-Help about_signing.

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

Сертификат для подписи можно сгенерировать самоподписной, воспользовавшись инструкцией в справке (Get-Help about_sign), но для корпоративной сети лучше использовать сервер сертификации.

Для нас необходимо иметь развернутый CA Enterprise. Открыть консоль сервера сертификатов, перейти на вкладку Certificate Templates и добавить новый шаблон сертификатов Code Singing. Само собой, хорошо бы этот сертификат докрутить, настроив политики безопасности т.д., но это выходит за рамки данной статьи.

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

sertifikat

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

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

Get-ChildItem cert:\CurrentUser\My –codesigning

Если вы только начали создавать сертификаты, то он у вас скорее всего один. Поэтому мы делаем следующее:

 $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]

Данная команда получает сертификат из хранилища, [0] – это порядковый номер сертификата, начиная с нуля, полученный предыдущей командой.

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

Set-AuthenticodeSignature Myscript.ps1 $cert

Теперь можно приступать к созданию задания на машине.

Сначала запускаем команду gpupdate /force для применения групповой политики. Для того что бы убедиться, что групповая политика применилась, проверяем наличие сертификата в папке Trusted Publisher и текущих правил запуска скриптов.

Теперь создаем Base Task в Task Scheduler. Вводим название и расписание выполнения, в качестве Action выбираем Start program в качестве пути запуска выбираем

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

В качестве аргументов -NoProfile -File C:\Scripts\myscript.ps1

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

Можно установить еще параметр -ExecutionPolicy AllSigned – он устанавливает политику запуска скриптов в сессии (при использовании данного параметра потребуется использование административных привилегий “Run with highest privileges” )

Links:

http://www.hanselman.com/blog/SigningPowerShellScripts.aspx

 http://dmitrysotnikov.wordpress.com/2011/02/03/how-to-schedule-a-powershell-script/

Интересная статья?  Подпишитесь на обновления блога и получите еще больше информации по RSS Vladimir Shurygin RSS  ,   RSS Vladimir Shurygin Email   или  twitter Vladimir Shurygin twitter !
Поделитесь с друзьями этой статьей в: