Запуск сценариев запуска (входа) PowerShell с помощью GPO

Групповая политика Windows позволяет запускать различные файлы сценариев при запуске/выключении компьютера или при входе/выходе пользователя. Вы можете использовать GPO не только для запуска классических пакетных сценариев входа в систему на компьютерах домена (.bat, .cmd, .vbs), а также для выполнения сценариев PowerShell (.ps1) во время запуска/выключения/входа в систему/выхода из системы.

В современных версиях Windows можно напрямую запускать сценарии входа/выхода PowerShell из редактора GPO (раньше для этого нужно было вызывать файл .ps1 из пакетного файла .bat в качестве параметра powershell.exe исполняемого файла).

Запустите консоль управления групповой политикой домена (GPMC.msc), создайте новую политику (GPO) и назначьте ее целевому контейнеру Active Directory (OU) с пользователями или компьютерами (можно использовать фильтры WMI GPO для точной настройки политики). Переключение на политику Редактировать режим.

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

  • Если вы хотите запускать сценарий PS при входе (выходе) пользователя на компьютер (для настройки параметров среды пользователя или программ: например, вы хотите автоматически генерировать подпись Outlook на основе свойств пользователя AD, настраивать параметры заставки или начального экрана), вам нужно перейти в раздел GPO: User Configuration -> Policies -> Windows Settings -> Scripts (Logon / Logoff);
  • Если вы хотите запустить сценарий PowerShell при загрузке компьютера (для отключения устаревших протоколов: NetBIOS и LLMNR, SMBv1, настройка параметров безопасности компьютера и т.д.) или перед выключением компьютера, вам нужно перейти в раздел GPO с настройками компьютера: Computer Configuration -> Policies -> Windows Settings -> Scripts (Startup / Shutdown).

Как запускать сценарии PowerShell при запуске Windows с помощью групповой политики?

Предположим, нам нужно запустить сценарий PowerShell при загрузке компьютера. Выберите Startup политику, и перейдите в раздел PowerShell Скрипты вкладка.

запуск сценариев PowerShell из GPOзапуск сценариев PowerShell из GPO

Теперь вам нужно скопировать файл с вашим сценарием PowerShell на контроллер домена. Скопируйте файл ps1 в каталог Netlogon на контроллере домена (например, \\woshub.com\netlogon).

Поскольку мы настраиваем сценарий Startup PowerShell, необходимо проверить NTFS «Read&Execute» разрешения для Domain Computers и/или Authenticated Users групп в разрешениях файла ps1.

скопируйте файл сценария gpo startup powershell в папку netlogon на контроллере доменаскопируйте файл сценария gpo startup powershell в папку netlogon на контроллере домена

Теперь нажмите Добавить и укажите UNC-путь к файлу сценария ps1 в Netlogon.

запуск сценария powershell при загрузке windows с помощью групповой политикизапуск сценария powershell при загрузке windows через групповую политику

Если вы запускаете несколько сценариев PowerShell через GPO, вы можете контролировать порядок выполнения сценариев с помощью параметра Вверх/Вниз кнопки.

Для корректного запуска сценариев PowerShell при загрузке компьютера необходимо настроить время задержки перед запуском сценариев с помощью политики в разделе Конфигурация компьютера -> Административные шаблоны -> Система -> Групповая политика. Включите параметр «Настроить задержку сценариев входа в систему» политика и укажите задержку в минутах перед запуском сценариев входа в систему (достаточную для завершения инициализации и загрузки всех необходимых служб). Обычно достаточно указать 1 или 2 минуты.

Политика задержки сценариев входа в системуПолитика задержки сценария входа в систему

Если ваш сценарий PowerShell использует сетевые возможности Windows, вам необходимо включить параметр «Указание времени ожидания обработки политики запуска» для некоторых GPO (Computer Configuration -> Policies -> Administrative Templates -> System -> Group Policy). Здесь вы можете попробовать начать с 60 секунд. После включения этой политики компьютер будет ждать 60 секунд для получения уведомлений о доступности сети перед запуском сценариев запуска. Обычно этого времени достаточно для инициализации сетевого стека Windows.

параметр gpo: время ожидания обработки политики запускапараметр gpo: время ожидания обработки политики запуска

В Windows Server 2012R2 и Windows 8.1 и более новых версиях сценарии PowerShell в GPO запускаются из каталога NetLogon в каталоге Bypass режиме. Это означает, что параметры политики выполнения сценариев PowerShell игнорируются. Если вы хотите запустить сценарий из другой общей папки или если в вашей сети все еще есть клиенты Windows 7 или Windows Server 2008R2, вам нужно настроить политику выполнения сценариев PowerShell.

По умолчанию параметры безопасности Windows не позволяют запускать сценарии PowerShell. Текущее значение параметра политики выполнения сценариев PowerShell можно получить с помощью команды Get-ExecutionPolicy команды. Если политика не настроена, команда вернет Ограничено (любые сценарии блокируются). Параметры безопасности для запуска сценария PowerShell можно настроить с помощью параметра «Включить выполнение сценария» политика (в разделе GPO Computer Configuration -> Administrative Templates -> Windows Components -> Windows PowerShell). Возможные значения политики:

  • Разрешить только подписанные сценарии (AllSigned) — вы можете запускать только подписанные сценарии PowerShell («Как поставить цифровую подпись на сценарий PowerShell?») — это лучший вариант с точки зрения безопасности;
  • Разрешить локальные сценарии и удаленные подписанные сценарии (RemoteSigned) — вы можете запускать любые локальные и подписанные удаленные скрипты;
  • Разрешить все скрипты (неограниченно) — самый небезопасный вариант, поскольку позволяет запускать любые сценарии PowerShell.

политика выполнения сценариев powershellполитика выполнения сценариев powershell

Если ни одна из настроек политики выполнения сценариев PowerShell вам не подходит, вы можете запускать сценарии PowerShell в режиме Обход режим (скрипты не блокируются и предупреждения не появляются).

Для этого запустите сценарий PowerShell из папки Startup -> Скрипты раздел. В этом разделе вы можете запустить свой сценарий PS1, вызвав исполняемый файл powershell.exe (аналогично сценарию, описанному в статье). Установите:

  • Имя сценария: %windir%\System32\WindowsPowerShell\v1.0\powershell.exe
  • Параметры скрипта: -Noninteractive -ExecutionPolicy Bypass -Noprofile -file %~dp0MyPSScript.ps1

запуск powershell.exe с параметрами через групповую политикузапуск powershell.exe с args через групповую политику

Термин %~dp0 это переменная окружения, которая автоматически преобразуется в UNC-путь к каталогу сценария (в данном случае NETLOGON).

В этом случае вы вынуждены разрешить запуск любого (даже недоверенного) сценария PowerShell с помощью параметра Bypass.

Перезагрузите компьютер, чтобы обновить параметры GPO, и проверьте, запускается ли сценарий PowerShell после загрузки Windows.

Запуск сценария Windows PowerShell при входе/выходе пользователя

Давайте рассмотрим, как автоматически запускать сценарий PowerShell при входе пользователя в Windows (или выходе из нее).

Если вам нужно запускать сценарий не при загрузке компьютера, а после входа пользователя в Windows (для каждого пользователя на компьютере), вам нужно связать GPO с Active Directory OU с пользователями. В этом случае сценарий PowerShell нужно настроить в разделе User Configuration вашего GPO.

Если вы хотите, чтобы политика применялась ко всем пользователям определенного компьютера, вам нужно связать политику с OU с компьютерами и включить параметр Настройка режима обработки шлейфа политики группы пользователей параметр в разделе Конфигурация компьютера -> Административные шаблоны -> Система -> Групповая политика). Если вы не включите режим обработки обратной связи, то параметры из раздела Конфигурация пользователя не будут применяться к пользователю. Дополнительные сведения см. в статье Group Policy Not Applying To User or Computer.

В этом примере я использую простой сценарий PowerShell, который записывает время входа пользователя в систему в текстовый файл журнала.

  1. Скопируйте файл сценария PowerShell в папку\\woshub.com\NETLOGON\ папку на контроллере домена Active Directory;
  2. Перейдите в раздел Конфигурация пользователя -> Политики -> Параметры Windows -> Сценарии -> Вход в систему;
  3. Перейдите на вкладку PowerShell Scripts и добавьте свой файл сценария PS1 (используйте UNC-путь, например \\woshub.com\NETLOGON\UserLog.ps1 );запуск скрипта powershell для входа в систему пользователя gpoзапустить скрипт powershell для входа в систему gpo пользователя
  4. Повторная регистрация пользователя на целевом компьютере;
  5. Ваш сценарий PowerShell будет запускаться автоматически через GPO, когда пользователь войдет в систему;
  6. Вы можете убедиться в том, что сценарий входа пользователя в систему был успешно выполнен, по идентификатору события 5018в разделе Microsoft-Windows-GroupPolicy/Operational программы Event Viewer:
    Completed Logon script for woshub\jsmith in 11 seconds.

    событие выполнения сценария входа в систему gpo в средстве просмотра событийсобытие выполнения сценария входа в систему gpo в средстве просмотра событий

Если вы хотите, чтобы пользователь не мог получить доступ к своему рабочему столу, пока сценарий не будет завершен, вы должны включить параметр GPO Запуск сценариев входа в систему синхронно (Конфигурация компьютера -> Административные шаблоны -> Система -> Вход в систему). В этом случае процесс explorer.exe не запустится до тех пор, пока не будут выполнены все политики и сценарии входа в систему (это увеличивает время входа пользователя в систему!).

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

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

  1. Создайте новое задание планировщика задач в разделе User Configuration -> Preferences -> Control Panel Settings -> Scheduled Task;
  2. На Генерал На вкладке «Общие» укажите, что задача будет запущена от имени текущего пользователя %LogonDomain%\%LogonUser и включите опцию Run with highest privileges опцию;запуск скрипта входа в систему gpo от имени администратора с задачей shedulerзапуск скрипта входа в систему gpo от имени администратора с помощью задачи sheduler
  3. На Триггер на вкладке укажите, что задание должно быть запущено При входе в систему;запуск сценария powershell при входе пользователя в системузапуск сценария powershell при входе пользователя в систему
  4. Укажите путь к файлу сценария PowerShell на странице Действия вкладка:

Действие: Запустить программу
Программа/Сценарий: C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe
Добавить аргументы (необязательно): -ExecutionPolicy Bypass -command "& \\woshub.com\Netlogon\Your_PS_Script.ps1"

Подробнее о настройке задач планировщика Windows с помощью GPO.

Такой сценарий PowerShell будет выполняться от имени администратора (если пользователь домена добавлен в локальную группу Administrators).

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

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

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