Выполнение скрипта PowerShell через GPO
Добрый день! Уважаемые читатели и гости одного из крупнейших IT порталов в России Pyatilistnik.org. В прошлый раз вы меня просили рассказать вам, о рабочих методах исправления черного экрана Windows 10 и я с вами ими поделился. Так как направленность моего ресурса больше рассчитана на системных администраторов и продвинутых пользователей, то я сегодня хочу вновь поговорить про групповые политики и автоматизацию получаемую благодаря им. В данной публикации речь пойдет, о запуске скрипта PowerShell средствами GPO (Групповой политики), мы рассмотрим все варианты доступные администраторам.
Постановка задачи
Когда начинающий системный администратор превращается в матерого админа, он хочет везде все автоматизировать и везде экономить свое время, и это логично люди существа любящие комфорт и лень. Рабочая среда Active Directory позволяет, как все знаете через групповые политики настройку почти всех компонентов в системе, а что не может замещается средствами PowerShell, вот такой симбиоз. В нашу задачу входит научиться запускать при загрузке компьютера или при входе пользователя на компьютер или сервер, наш скрипт PowerShell, который реализует ту или иную задачу, это не важно, пусть например монтирует базы 1С.
Методы запуска скрипта PowerShell через GPO
Существует несколько сценариев позволяющих вам применять к вашим объектам нужные скрипты:
- Скрипт применяется в автозагрузке системы, в момент загрузки операционной системы
- Скрипт отработает во время входа или выхода пользователя из системы
- Ну и запуск скрипта по расписанию, такое то же имеет место быть
Запуск PowerShell скрипта в автозагрузке сервера
Открываем оснастку "Управление групповой политикой" и создаем на нужном уровне вашей иерархии организационных подразделений, новую политику, в моем примере, это будет "Добавление баз 1С". Переходим к ее редактированию.
Для того, чтобы при загрузке вашего сервера или компьютера, к нему применялся нужный вам сценарий PowerShell вам необходимо перейти в раздел:
Тут вы увидите два возможных варианта "Автозагрузка" и "Завершение работы"
Далее вы открываете пункт "Автозагрузка", переходите на вкладку "Сценарий PowerShell" и нажимаете кнопку "Добавить". Через окно "добавление сценария" откройте папку "Startup" и скопируйте туда ваш скрипт. Теперь данный файл будет частью папки Sysvol и располагаться в конкретном GPO объекте.
Так же хочу отметить, что вы можете задать порядок выполнения PowerShell сценария в соответствующей области, выбрав будет ли он выполнятся после других сценариев или перед.
Еще есть ряд нюансов при использовании выполнения скриптов PowerShell средствами групповой политики:
- Во первых по умолчанию в Windows есть 5-ти минутная задержка выполнения скриптом, как ее отключать я рассказывал можете почитать вот тут.
- Если у вас в локальной сети присутствуют операционные системы по типу Windows Server 2008 или ниже, то там есть подводные камни в виде выполнения неподписанных скриптов и во вторых в старой версии PowerShell
Хочу отметить, что начиная с Windows Server 2012 R2, Windows 8.1 и выше, все запускаемые сценарии PowerShell через GPO работают в режиме Bypass, что подразумевает игнорирование политики Set-ExecutionPolicy. Но если у вас есть более старые клиенты, то вы можете пойти вот таким путем:
Вы можете явно указать исполняемый файл PowerShell, для этого в политике откройте вкладку "Сценарии", нажмите добавить. В имя сценария введите путь до файла powerShell, это:
В параметрах сценария введите вот такие ключи и сетевой путь до скрипта PowerShell.
Еще для подстраховки вы можете включить параметр GPO
(Computer Configuration - Administrative Templates - Windows Components - Windows PowerShell)
Активируем настройку "Включить выполнение сценариев (Turn On Script Execution)", выставим значение "Разрешать все сценарии".
Проверяем применение вашей GPO, если все настроили правильно она отработает если нет, то начинается траблшутинг, проверяете фильтры GPO и общий алгоритм поиска проблем.
Запуск PowerShell скрипта для пользователя
Чтобы применить к пользователю ваш скрипт, вам необходимо в объекте групповой политики открыть вот такую ветку:
Тут будет два варианта "Вход в систему" и "Выход из системы".
Настраиваем аналогично, как я показывал выше для компьютера, все одинаково.
Выполнение сценариев PowerShell по расписанию
Тут все просто, если вы хотите средствами групповой политики запускать скрипты PowerShell по расписанию, то вам нужно создать задание в шедуллере. Для этого есть ветки GPO:
Конфигурация компьютера - Настройки - Параметры панели управления - Назначенные задания
Указываем в задании нужное время, имя и сетевой путь до скрипта.
Как видите все просто. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.
Добрый день, Иван!
Есть вопрос по теме плюс. Добавил .ps1 пользователю на Вход в систему. Сценарий выполняется без проблем. Но выполняется два(!) раза, причём по ощущениям последовательно (сначала первый раз и, через небольшой промежуток времени, второй). Как найти именно эту причину, повторный запуск сценария?
Нужно посмотреть утилитой gpresult, что применяется на пользователя и компьютер, еще можно RSOP запустить и то же посмотреть
А можно как-то запустить скрипт для пользователя, но с правами администратора?