Поиск по сайту:

Запуск сценариев запуска (входа) 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, который записывает время входа пользователя в текстовый файл журнала.

  1. Скопируйте файл сценария PowerShell в папку

    \\active-directory.ru\NETLOGON\

    папка на контроллере домена Active Directory;

  2. Зайдите в Конфигурацию пользователя -> Политики -> Настройки Windows -> Скрипты -> Вход в систему;

  3. Перейдите на вкладку «Сценарии PowerShell» и добавьте файл сценария PS1 (например, используйте путь UNC).

    \\active-directory.ru\NETLOGON\UserLog.ps1

    );

  4. Перелогиньте пользователя на целевом компьютере;

  5. Ваш сценарий PowerShell будет запускаться автоматически через объект групповой политики при входе пользователя в систему;

  6. Вы можете убедиться, что сценарий входа пользователя был успешно выполнен с помощью идентификатора события 5018 в разделе Microsoft-Windows-GroupPolicy/Operational средства просмотра событий:

    Completed Logon script for active-directory\jsmith in 11 seconds.

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

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

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

  1. Создайте новое задание планировщика задач в разделе «Конфигурация пользователя» -> «Настройки» -> «Настройки панели управления» -> «Запланированное задание»;

  2. На вкладке Общие укажите, что задача будет запускаться от имени текущего пользователя.

    %LogonDomain%\%LogonUser

    и включите

    Run with highest privileges

    вариант;

  3. На вкладке Триггер укажите, что задача должна запускаться При входе в систему;

  4. Укажите путь к файлу сценария PowerShell на вкладке Действия:

Действие: Запустите программу
Программа/скрипт:

C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe

Добавьте аргументы (необязательно):

-ExecutionPolicy Bypass -command "& \\active-directory.ru\Netlogon\Your_PS_Script.ps1"

Узнайте больше о настройке задач планировщика Windows через объект групповой политики.

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

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

Статьи по данной тематике