Запуск PowerShell скриптів за допомогою GPO

Групові політики Window дозволяють запускати різні файли скриптів при завантаженні / завершення роботи комп'ютера, вході / виході користувача. За допомогою GPO ви можете виконувати на комп'ютерах домену не тільки класичні файли скриптів (.bat, .cmd,, vbs), але і Startup / Shutdown / Logon / Logoff скрипти PowerShell (.ps1)

В сучасних операційних системах (Windows 10 / Windows Server 2016) ви можете налаштовувати запуск логон / логоф скриптів на PowerShell безпосередньо з редактора GPO.

До Windows 7 і Windows Server 2008 R2 можна було безпосередньо виконувати PowerShell файли з GPO (доводилося викликати ps1 файли з bat файлів в якості параметра виконуваного файлу powershell.exe).

Запустіть консоль управління доменними політиками - GPMC.msc (Group Policy Management Сonsole), створіть нову політику і призначте її на потрібний контейнер з користувачами або комп'ютерами (можна використовувати WMI фільтри GPO для більш тонкого націлювання політики). Перейдіть в режим редагування політики.

Ви повинні вибрати розділ GPO для запуску PowerShell скрипта в залежності від того, коли ви хочете виконати ваш скрипт.

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

Запуск PowerShell скрипта при завантаженні комп'ютера за допомогою групової політики

Припустимо, нам потрібно запускати PowerShell скрипт при завантаженні Windows. Для цього потрібно вибрати Startup і у вікні, перейди на вкладку PowerShell Scripts.

Тепер потрібно скопіювати файл з вашим PowerShell скриптом на контролер домену. Натисніть на кнопку Show Files і перетягніть файл з PowerShell скриптом (розширення ps1) у вікно провідника (консоль автоматично відкриє каталог \\ yourdomain \ SysVol \ yourdomain \ Policies \ Здесь_GUID_вашей_GPO \ Machine \ Scripts \ Startup вашої політики в каталозі SysVol на найближчому контролері домену).

Оскільки ми налаштовуємо запуск Startup скрипта PowerShell, потрібно в дозволах ps1 файлу (або всього каталогу Machine \ Scripts \ Startup) перевірити NTFS права доступу на читання і виконання (Read & Execute) для групи Domain Computers.

Тепер потрібно натиснути кнопку Add і додати скопійований файл скрипта ps1 в список запускаються політикою PowerShell скриптів.

Якщо ви запускаєте кілька PowerShell скриптів через GPO, ви можете управляти порядком з запуску за допомогою кнопок Up / Down.

Для коректного виконання скриптів PowerShell при завантаженні комп'ютера потрібно налаштувати час затримки перед запуском за допомогою політики в розділі Computer Configuration -> Administrative Templates -> System -> Group Policy. Увімкніть політику Configure Logon Script Delay (Налаштувати затримку сценарію входу в систему) і вкажіть затримку в хвилинах перед запуском логон-скриптів (достатня для закінчення ініціалізації і завантаження всіх необхідних служб). Зазвичай достатньо поставити тут 1-2 хвилини.

За замовчуванням в налаштуваннях безпеки Windows заборонений запуск PowerShell скриптів. Значення поточної настройки політики запуску сценаріїв PowerShell можна отримати командою Get-ExecutionPolicy. Якщо політика не налаштована, команда поверне Restricted (блокуються будь-які скрипти). Параметри безпеки запуску PowerShell скриптом можна налаштувати через політику "Включити виконання сценаріїв" / "Turn On Script Execution"(В розділі GPO Computer Configuration -> Administrative Templates -> Windows Components -> Windows PowerShell). Можливі значення політики:

  • Allow only signed scripts (AllSigned) - можна запускати тільки підписані скрипти PowerShell ( "Як підписати скрипт PowerShell?")-Самий кращий сценарій з точки зору безпеки;
  • Allow local scripts and remote signed scripts (RemoteSigned) - можна запускати будь-які локальні і підписані віддалені скрипти;
  • Allow all scripts (Unrestricted) - самий небезоапасний варіант, тому що дозволяє запуск будь-яких PowerShell скриптів.

Якщо вам не підходить жоден з запропонованих сценаріїв налаштування політики запуску PowerShell скриптів, ви можете запускати PowerShell скрипти в режимі Bypass (скрипти не блокують, попередження не з'являються).

Для цього PowerShell скрипт потрібно запускати з секції Startup -> Scripts. У цій секції ви можете налаштувати запуск ps1 сценарію за допомогою створення звичайного Startup скрипта, що запускає виконуваний файл powershell.exe (за аналогією зі сценарієм, описаним в статті). вкажіть:

  • Script name: % Windir% \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe
  • Script Parameters: -Noninteractive -ExecutionPolicy Bypass -Noprofile -file% ~ dp0MyPSScript.ps1

символи % ~ Dp0 при запуску на клієнті автоматично перетворюються в UNC шлях до каталогу зі скриптом на SYSVOL.

В даному випадку ви примусово дозволили запуск будь-якого (навіть ненадійного) скрипта PowerShell за допомогою параметра Bypass.