
Групповая политика 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 на контроллер домена. Скопируйте файл ps1 в каталог Netlogon на контроллере домена (например, \\woshub.com\netlogon
).
Поскольку мы настраиваем сценарий Startup PowerShell, необходимо проверить NTFS «Read&Execute» разрешения для Domain Computers
и/или Authenticated Users
групп в разрешениях файла ps1.
Теперь нажмите Добавить и укажите UNC-путь к файлу сценария ps1 в Netlogon.
Если вы запускаете несколько сценариев PowerShell через GPO, вы можете контролировать порядок выполнения сценариев с помощью параметра Вверх/Вниз кнопки.
Для корректного запуска сценариев PowerShell при загрузке компьютера необходимо настроить время задержки перед запуском сценариев с помощью политики в разделе Конфигурация компьютера -> Административные шаблоны -> Система -> Групповая политика. Включите параметр «Настроить задержку сценариев входа в систему» политика и укажите задержку в минутах перед запуском сценариев входа в систему (достаточную для завершения инициализации и загрузки всех необходимых служб). Обычно достаточно указать 1 или 2 минуты.
В 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 из папки Startup -> Скрипты раздел. В этом разделе вы можете запустить свой сценарий PS1, вызвав исполняемый файл powershell.exe (аналогично сценарию, описанному в статье). Установите:
- Имя сценария:
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe
- Параметры скрипта:
-Noninteractive -ExecutionPolicy Bypass -Noprofile -file %~dp0MyPSScript.ps1
%~dp0
это переменная окружения, которая автоматически преобразуется в UNC-путь к каталогу сценария (в данном случае NETLOGON).В этом случае вы вынуждены разрешить запуск любого (даже недоверенного) сценария PowerShell с помощью параметра Bypass.
Перезагрузите компьютер, чтобы обновить параметры GPO, и проверьте, запускается ли сценарий PowerShell после загрузки Windows.
Запуск сценария Windows PowerShell при входе/выходе пользователя
Давайте рассмотрим, как автоматически запускать сценарий PowerShell при входе пользователя в Windows (или выходе из нее).
Если вам нужно запускать сценарий не при загрузке компьютера, а после входа пользователя в Windows (для каждого пользователя на компьютере), вам нужно связать GPO с Active Directory OU с пользователями. В этом случае сценарий PowerShell нужно настроить в разделе User Configuration вашего GPO.
В этом примере я использую простой сценарий PowerShell, который записывает время входа пользователя в систему в текстовый файл журнала.
- Скопируйте файл сценария PowerShell в папку
\\woshub.com\NETLOGON\
папку на контроллере домена Active Directory; - Перейдите в раздел Конфигурация пользователя -> Политики -> Параметры Windows -> Сценарии -> Вход в систему;
- Перейдите на вкладку PowerShell Scripts и добавьте свой файл сценария PS1 (используйте UNC-путь, например
\\woshub.com\NETLOGON\UserLog.ps1
); - Повторная регистрация пользователя на целевом компьютере;
- Ваш сценарий PowerShell будет запускаться автоматически через GPO, когда пользователь войдет в систему;
- Вы можете убедиться в том, что сценарий входа пользователя в систему был успешно выполнен, по идентификатору события 5018в разделе Microsoft-Windows-GroupPolicy/Operational программы Event Viewer:
Completed Logon script for woshub\jsmith in 11 seconds.
Если вы хотите, чтобы пользователь не мог получить доступ к своему рабочему столу, пока сценарий не будет завершен, вы должны включить параметр GPO Запуск сценариев входа в систему синхронно (Конфигурация компьютера -> Административные шаблоны -> Система -> Вход в систему). В этом случае процесс explorer.exe не запустится до тех пор, пока не будут выполнены все политики и сценарии входа в систему (это увеличивает время входа пользователя в систему!).
Обратите внимание, что сценарий запускается с правами текущего пользователя. Если у пользователя есть административные права на компьютере и включены параметры контроля учетных записей пользователей (UAC), сценарий PowerShell не сможет внести изменения, требующие повышенных привилегий.
Чтобы запустить сценарии входа в систему PowerShell с повышенными правами пользователя, можно использовать Задачи планировщика.
- Создайте новое задание планировщика задач в разделе User Configuration -> Preferences -> Control Panel Settings -> Scheduled Task;
- На Генерал На вкладке «Общие» укажите, что задача будет запущена от имени текущего пользователя
%LogonDomain%\%LogonUser
и включите опциюRun with highest privileges
опцию; - На Триггер на вкладке укажите, что задание должно быть запущено При входе в систему;
- Укажите путь к файлу сценария PowerShell на странице Действия вкладка:
Действие: Запустить программу
Программа/Сценарий: C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe
Добавить аргументы (необязательно): -ExecutionPolicy Bypass -command "& \\woshub.com\Netlogon\Your_PS_Script.ps1"
Такой сценарий PowerShell будет выполняться от имени администратора (если пользователь домена добавлен в локальную группу Administrators).
Некоторые сценарии входа в систему необходимо запускать для каждого пользователя только один раз при первом входе на компьютер (инициализация рабочей среды, копирование папок или файлов конфигурации, создание ярлыков и т. д.). Вот простой трюк, позволяющий запустить сценарий только один раз с помощью GPO.