Выполнение скрипта PowerShell через GPO

Обновлено 17.07.2019

PowerShell logoДобрый день! Уважаемые читатели и гости одного из крупнейших IT порталов в России Pyatilistnik.org. В прошлый раз вы меня просили рассказать вам, о рабочих методах исправления черного экрана Windows 10 и я с вами ими поделился. Так как направленность моего ресурса больше рассчитана на системных администраторов и продвинутых пользователей, то я сегодня хочу вновь поговорить про групповые политики и автоматизацию получаемую благодаря им. В данной публикации речь пойдет, о запуске скрипта PowerShell средствами GPO (Групповой политики), мы рассмотрим все варианты доступные администраторам.

Постановка задачи

Когда начинающий системный администратор превращается в матерого админа, он хочет везде все автоматизировать и везде экономить свое время, и это логично люди существа любящие комфорт и лень. Рабочая среда Active Directory позволяет, как все знаете через групповые политики настройку почти всех компонентов в системе, а что не может замещается средствами PowerShell, вот такой симбиоз. В нашу задачу входит научиться запускать при загрузке компьютера или при входе пользователя на компьютер или сервер, наш скрипт PowerShell, который реализует ту или иную задачу, это не важно, пусть например монтирует базы 1С.

Методы запуска скрипта PowerShell через GPO

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

  1. Скрипт применяется в автозагрузке системы, в момент загрузки операционной системы
  2. Скрипт отработает во время входа или выхода пользователя из системы
  3. Ну и запуск скрипта по расписанию, такое то же имеет место быть

Запуск PowerShell скрипта в автозагрузке сервера

Открываем оснастку "Управление групповой политикой" и создаем на нужном уровне вашей иерархии организационных подразделений, новую политику, в моем примере, это будет "Добавление баз 1С". Переходим к ее редактированию.

Открываем оснастку "Управление групповой политикой"

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

Конфигурация компьютера - Политики - Конфигурация Windows - Сценарий (запуск/завершение) (Computer Configuration - Policies - Windows Settings - Scripts (Startup/Shutdown)

Тут вы увидите два возможных варианта "Автозагрузка" и "Завершение работы"

Запуск powershell через групповую политику

Далее вы открываете пункт "Автозагрузка", переходите на вкладку "Сценарий PowerShell" и нажимаете кнопку "Добавить". Через окно "добавление сценария" откройте папку "Startup" и скопируйте туда ваш скрипт. Теперь данный файл будет частью папки Sysvol и располагаться в конкретном GPO объекте.

Добавление скрипта powershell в автозагрузку через GPO

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

Варианты запуска сценария powershell в gpo

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

  1. Во первых по умолчанию в Windows есть 5-ти минутная задержка выполнения скриптом, как ее отключать я рассказывал можете почитать вот тут.
  2. Если у вас в локальной сети присутствуют операционные системы по типу Windows Server 2008 или ниже, то там есть подводные камни в виде выполнения неподписанных скриптов и во вторых в старой версии PowerShell

Хочу отметить, что начиная с Windows Server 2012 R2, Windows 8.1 и выше, все запускаемые сценарии PowerShell через GPO работают в режиме Bypass, что подразумевает игнорирование политики Set-ExecutionPolicy. Но если у вас есть более старые клиенты, то вы можете пойти вот таким путем:

Вы можете явно указать исполняемый файл PowerShell, для этого в политике откройте вкладку "Сценарии", нажмите добавить. В имя сценария введите путь до файла powerShell, это:

%windir%\System32\WindowsPowerShell\v1.0\powershell.exe

В параметрах сценария введите вот такие ключи и сетевой путь до скрипта PowerShell.

-Noninteractive -ExecutionPolicy Bypass –Noprofile -file \\root.pyatilistnik.org\SysVol\root.pyatilistnik.org\ Policies\{2B79FA3E-CB2F-4D15-A446-3DBBF887CD40}\ Machine\Scripts\Startup\Add-Base-1C.ps1

PowerShell с помощью GPO

Еще для подстраховки вы можете включить параметр GPO

Конфигурация компьютера - Административные шаблоны - Компоненты Windows - Windows Powershell
(Computer Configuration - Administrative Templates - Windows Components - Windows PowerShell)

Активируем настройку "Включить выполнение сценариев (Turn On Script Execution)", выставим значение "Разрешать все сценарии".

Включить выполнение сценариев

Небольшой совет, я бы вам рекомендовал включать выполнение всех сценариев исключительно для старых ОС, для этого вы можете сделать отдельную политику и применить ее только к старым операционным системам, через WMI фильтр

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

Запуск PowerShell скрипта для пользователя

Чтобы применить к пользователю ваш скрипт, вам необходимо в объекте групповой политики открыть вот такую ветку:

Конфигурация пользователя - Политики - Конфигурация Windows - Сценарии (Вход/Выход из системы) (User Configuration - Policies - Windows Settings - Scripts

Тут будет два варианта "Вход в систему" и "Выход из системы".

Запуск PowerShell скрипта для пользователя

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

PowerShell с помощью GPO-08

Выполнение сценариев PowerShell по расписанию

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

Конфигурация пользователя - Настройки - Параметры панели управления - Назначенные задания

Конфигурация компьютера - Настройки - Параметры панели управления - Назначенные задания

запускать скрипты PowerShell по расписанию

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

Назначенные задания GPO

Как видите все просто. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Автор - Сёмин Иван

3 Responses to Выполнение скрипта PowerShell через GPO

  1. Юрий:

    Добрый день, Иван!

    Есть вопрос по теме плюс. Добавил .ps1 пользователю на Вход в систему. Сценарий выполняется без проблем. Но выполняется два(!) раза, причём по ощущениям последовательно (сначала первый раз и, через небольшой промежуток времени, второй). Как найти именно эту причину, повторный запуск сценария?

  2. Иван Семин:

    Нужно посмотреть утилитой gpresult, что применяется на пользователя и компьютер, еще можно RSOP запустить и то же посмотреть

  3. Алексей:

    А можно как-то запустить скрипт для пользователя, но с правами администратора?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *