Запуск сценариев запуска (входа) PowerShell с использованием объекта групповой политики
Групповая политика Windows позволяет запускать различные файлы сценариев при запуске/выключении компьютера или во время входа/выхода пользователя. Объекты групповой политики можно использовать не только для запуска классических сценариев пакетного входа на компьютерах домена (
.bat,
.cmd,
.vbs), но и для выполнения сценариев PowerShell (
.ps1) во время запуска/выключения/входа в систему/выхода из системы.
В современных версиях Windows можно напрямую запускать сценарии входа и выхода из системы PowerShell из редактора объекта групповой политики (ранее необходимо было вызывать файл .ps1 из пакетного файла .bat в качестве параметра
powershell.exeисполняемый файл).
Запустите консоль управления групповыми политиками домена (
GPMC.msc), создайте новую политику (GPO) и назначьте ее целевому контейнеру Active Directory (OU) с пользователями или компьютерами (вы можете использовать фильтры GPO WMI для точного таргетинга политики). Переключитесь в режим Изменить политики.
Вам необходимо выбрать раздел GPO для запуска сценария PowerShell, в зависимости от того, когда вы хотите выполнить сценарий PS1:
Если вы хотите запускать сценарий PS при входе (выходе) пользователя на компьютер (для настройки параметров среды пользователя или программ: например, вы хотите автоматически генерировать подпись Outlook на основе свойств пользователя AD, настраивать заставку или Настройки стартового экрана) необходимо перейти в раздел GPO: Конфигурация пользователя -> Политики -> Настройки Windows -> Скрипты (Вход/Выход из системы);
Если вы хотите запускать скрипт PowerShell при запуске компьютера (для отключения устаревших протоколов: NetBIOS и LLMNR, SMBv1, настройки параметров безопасности компьютера и т. д.) или перед выключением компьютера, вам необходимо зайти в раздел GPO с компьютером. настройки: Конфигурация компьютера -> Политики -> Настройки Windows -> Скрипты (запуск/выключение).
Как запускать сценарии PowerShell при запуске Windows с помощью групповой политики?
Предположим, нам нужно запустить сценарий PowerShell при запуске компьютера. Выберите Политику запуска и перейдите на вкладку PowerShell Сценарии .
Теперь вам нужно скопировать файл с вашим скриптом PowerShell на контроллер домена. Скопируйте файл ps1 в каталог Netlogon на контроллере домена (например,
\\active-directory.ru\netlogon
).
Поскольку мы настраиваем сценарий запуска PowerShell, вам необходимо проверить разрешения NTFS «Read&Execute» для
Domain Computersи/или
Authenticated Usersгруппы в разрешениях файла PS1.
Теперь нажмите Добавить и укажите UNC-путь к файлу сценария ps1 в Netlogon.
Если вы запускаете несколько сценариев PowerShell через объект групповой политики, вы можете контролировать порядок выполнения сценариев с помощью кнопок Вверх/Вниз.
Для корректного запуска сценариев PowerShell при запуске компьютера необходимо настроить время задержки перед запуском сценариев с помощью политики в разделе «Конфигурация компьютера» -> «Административные шаблоны» -> «Система» -> «Групповая политика». Включите политику «Настроить задержку сценария входа в систему» и укажите задержку в минутах перед запуском сценариев входа в систему (достаточную для завершения инициализации и загрузки всех необходимых служб). Обычно здесь достаточно уделить 1-2 минуты.
Если ваш сценарий PowerShell использует сеть Windows, вам необходимо включить параметр «Указать время ожидания обработки политики запуска» для некоторых объектов групповой политики (Конфигурация компьютера -> Политики -> Административные шаблоны -> Система -> Групповая политика). . Вы можете попробовать начать с 60 секунд здесь. После включения этой политики ваш компьютер будет ждать 60 секунд уведомлений о доступности сети, прежде чем запускать сценарии запуска. Обычно этого времени достаточно для инициализации сетевого стека Windows.
В Windows Server 2012R2 и Windows 8.1 и более поздних версиях сценарии PowerShell в объекте групповой политики запускаются из каталога NetLogon в режиме обхода. Это означает, что параметры политики выполнения сценариев PowerShell игнорируются. Если вы хотите запустить сценарий из другой общей папки или если в вашей сети все еще есть клиенты Windows 7 или Windows Server 2008R2, вам необходимо настроить политику выполнения сценариев PowerShell.
По умолчанию настройки безопасности Windows не позволяют запускать сценарии PowerShell. Текущее значение параметра политики выполнения сценариев PowerShell можно получить с помощью команды
Get-ExecutionPolicyкомандлет. Если политика не настроена, команда вернет Restricted (любые сценарии заблокированы). Параметры безопасности для запуска сценария PowerShell можно настроить с помощью политики «Включить выполнение сценариев» (в разделе «Конфигурация компьютера GPO» -> «Административные шаблоны» -> «Компоненты Windows» -> «Windows PowerShell»). Возможные значения политики:
Разрешить только подписанные сценарии (AllSigned) — вы можете запускать только подписанные сценарии PowerShell («Как поставить цифровую подпись сценарию PowerShell?») — это лучший вариант с точки зрения безопасности;
Разрешить локальные и удаленно подписанные сценарии (RemoteSigned) - вы можете запускать любые локальные и подписанные удаленные сценарии;
Разрешить все сценарии (без ограничений) - самый небезопасный вариант, поскольку позволяет запускать любые сценарии PowerShell.
Если ни один из параметров политики выполнения скриптов PowerShell вам не подходит, вы можете запускать скрипты PowerShell в режиме Обход (скрипты не блокируются и предупреждения не появляются).
Для этого запустите сценарий PowerShell из раздела Автозагрузка -> Скрипты. В этом разделе вы можете запустить сценарий PS1, вызвав исполняемый файл powershell.exe (аналогично сценарию, описанному в статье). Набор:
Имя сценария:
%windir%\System32\WindowsPowerShell\v1.0\powershell.exeПараметры скрипта:
-Noninteractive -ExecutionPolicy Bypass -Noprofile -file %~dp0MyPSScript.ps1
Термин
%~dp0— это переменная среды, которая автоматически преобразуется в UNC-путь к каталогу сценария (в данном случае NETLOGON).
В этом случае вы вынуждены разрешить запуск любого (даже ненадежного) сценария PowerShell с использованием параметра Bypass.
Перезагрузите компьютер, чтобы обновить настройки объекта групповой политики, и убедитесь, что сценарий PowerShell запускается после загрузки Windows.
Запуск сценария Windows PowerShell при входе в систему или выходе пользователя
Давайте посмотрим, как автоматически запускать сценарий PowerShell, когда пользователь входит в систему (или выходит из системы) Windows.
Если вам нужно запустить скрипт не при запуске компьютера, а после входа пользователя в Windows (для каждого пользователя на компьютере), вам необходимо связать GPO с подразделением Active Directory с пользователями. В этом случае сценарий PowerShell необходимо настроить в разделе «Конфигурация пользователя» вашего объекта групповой политики.
Если вы хотите, чтобы политика применялась ко всем пользователям определенного компьютера, вам необходимо связать политику с подразделением с компьютерами и включить параметр Настроить режим циклической обработки групповой политики пользователей в Конфигурации компьютера -> Административные шаблоны -> Система -> Групповая политика). Если вы не включите обработку шлейфа, то параметры из раздела User Configuration не будут применены к пользователю. Для получения дополнительной информации ознакомьтесь с публикацией «Групповая политика не применяется к пользователю или компьютеру».
В этом примере я буду использовать простой сценарий PowerShell, который записывает время входа пользователя в текстовый файл журнала.
Скопируйте файл сценария PowerShell в папку
\\active-directory.ru\NETLOGON\папка на контроллере домена Active Directory;
Зайдите в Конфигурацию пользователя -> Политики -> Настройки Windows -> Скрипты -> Вход в систему;
Перейдите на вкладку «Сценарии PowerShell» и добавьте файл сценария PS1 (например, используйте путь UNC).
\\active-directory.ru\NETLOGON\UserLog.ps1);
Перелогиньте пользователя на целевом компьютере;
Ваш сценарий PowerShell будет запускаться автоматически через объект групповой политики при входе пользователя в систему;
Вы можете убедиться, что сценарий входа пользователя был успешно выполнен с помощью идентификатора события 5018 в разделе Microsoft-Windows-GroupPolicy/Operational средства просмотра событий:
Completed Logon script for active-directory\jsmith in 11 seconds.
Если вы хотите, чтобы пользователь не мог получить доступ к своему рабочему столу до завершения сценария, необходимо включить параметр GPO Выполнять сценарии входа в систему синхронно (Конфигурация компьютера -> Административные шаблоны -> Система -> Вход в систему). . В этом случае процесс explorer.exe не запустится до тех пор, пока не будут выполнены все политики и сценарии входа (это увеличивает время входа пользователя в систему!).
Обратите внимание, что сценарий запускается с правами текущего пользователя. Если у пользователя есть права администратора на компьютере и включены параметры контроля учетных записей (UAC), сценарий PowerShell не может вносить изменения, требующие повышенных привилегий.
Чтобы запустить сценарии входа в PowerShell с повышенными правами пользователя, вы можете использовать задачи планировщика.
Создайте новое задание планировщика задач в разделе «Конфигурация пользователя» -> «Настройки» -> «Настройки панели управления» -> «Запланированное задание»;
На вкладке Общие укажите, что задача будет запускаться от имени текущего пользователя.
%LogonDomain%\%LogonUserи включите
Run with highest privilegesвариант;
На вкладке Триггер укажите, что задача должна запускаться При входе в систему;
Укажите путь к файлу сценария PowerShell на вкладке Действия:
Действие: Запустите программу
Программа/скрипт:
C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exeДобавьте аргументы (необязательно):
-ExecutionPolicy Bypass -command "& \\active-directory.ru\Netlogon\Your_PS_Script.ps1"Узнайте больше о настройке задач планировщика Windows через объект групповой политики.
Такой сценарий PowerShell будет запускаться от имени администратора (если пользователь домена добавлен в локальную группу «Администраторы»).
Некоторые сценарии входа необходимо запускать для каждого пользователя только один раз при первом входе в компьютер (инициализация рабочей среды, копирование папок или файлов конфигурации, создание ярлыков и т.п.). Вот простой трюк, который позволяет запустить скрипт только один раз, используя GPO.










