За замовчуванням налаштування Windows забороняють запуск скриптів PowerShell. Це необхідно для запобігання запуску шкідливого коду на PowerShell. Налаштування політик запуску PowerShell скриптів визначаються в Execution Policy. У цій статті ми розглянемо доступні політики запуску PS скриптів, як змінити Execution Policy і налаштувати політики використання PowerShell скриптів на комп’ютерах в домені.

Виконання PowerShell скриптів заборонено для даної системи

При спробі виконати PowerShell скрипт (файл з розширенням PS1) на чистій Windows 10, з’являється помилка:

File C:ps.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
Не удается загрузить файл.ps1, так как выполнение скриптов запрещено для данной системы.

Неможливо завантажити файл ps1, так як виконання скриптів заборонено для даної системи.

Поточне значення політики виконання скриптів PowerShell на комп’ютері можна отримати командою:

Get-ExecutionPolicy

Get-ExecutionPolicy

В наявності є таке значення PowerShell Execution Policy:

  • RemoteSigned – можна запускати локальні PowerShell скрипти без обмеження. Можна запускати віддалені PS файли з цифровим підписом (можна запустити PS1 файли, викачані з Інтернету, запущені з мережевої папки по UNC шляху і т.д.);
  • Необмежений – дозволений запуск всіх PowerShell скриптів;

    При запуску сторонніх PowerShell скриптів може з’являється попередження з підтвердженням запуску, див. Нижче.

  • Обхід – дозволений запуск будь-яких PS файлів (попередження не виводяться) – ця політика зазвичай використовується для автоматичного запуску PS скриптів без виведення будь-яких повідомлень (наприклад при запуску через GPO, SCCM, планувальник і т.д.) і не рекомендується для постійного використання;
  • За замовчуванням – скидання налаштувань виконання скриптів на стандартну;

    У Windows 10 значення політики виконання PowerShell за замовчуванням Restricted, а в Windows Server 2016 – RemoteSigned.

  • Не визначено – не задано. Застосовується політика Restricted для десктопних ОС і RemoteSigned для серверних.

Як дозволити запуск скриптів PowerShell за допомогою Execution Policy?

Щоб змінити поточне значення політики запуску PowerShell скриптів, використовується командлет Set-ExecutionPolicy.

Наприклад, дозволимо запуск локальних скриптів:

Set-ExecutionPolicy RemoteSigned

Підтвердіть зміна політики запуску PS1 скриптів, натиснувши Y або A.

Set-ExecutionPolicy RemoteSigned дозволити запуск локальних powershell скриптів

Щоб запит не з’являвся, можна використовувати параметр Сила.

Set-ExecutionPolicy RemoteSigned –Force

Якщо ви встановили значення політики PowerShell Execution Policy в Unrestricted, то при запуску віддалених скриптів з мережевих каталогів по UNC шляху, викачаних з інтернету файлів, все одно буде з’являтися попередження:

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the
Unblock-File cmdlet to allow the script to run without this warning message.
Do you want to run?
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D")

Запускайте лише ті сценарії, яким ви довіряєте.  Хоча сценарії з Інтернету можуть бути корисними, цей сценарій може потенційно зашкодити вашому комп’ютеру.  Якщо ви довіряєте цьому сценарію, використовуйте командлет Unblock-File, щоб дозволити сценарію працювати без цього попереджувального повідомлення

Як PowerShell розрізняє локальні і віддалені скрипти? Вся справа в ідентифікатор зони ZoneId, яку виставляє браузер в альтернативному потоці при завантаженні файлу (див. Статтю “Як Windows визначає, що файл викачаний з Інтернету?”). Ви можете розблокувати такий файл, поставивши галочку “Разблокірвать” в його властивості або очиститися мітку зони за допомогою комадлета Unblock-File.

Також слід розрізняти різні області дії політик виконання скриптів PowerShell (scopes):

  • MachinePolicy – діє для всіх користувачів комп’ютера, налаштовується через GPO;
  • UserPolicy – діє на користувачів комп’ютера, також налаштовується через GPO;
  • Процес – налаштування ExecutionPolicy діє тільки для поточного сеансу PowerShell.exe (скидаються при закритті процесу);
  • Поточний користувач – політика ExecutionPolicy застосовується тільки до активного користувача (параметр з гілки реєстру HKEY_CURRENT_USER);
  • LocalMachine – політика для всіх користувачів комп’ютера (параметр з гілки реєстру HKEY_LOCAL_MACHINE);

Область застосування політики можна вказати за допомогою параметр Сфера дії командлет Set-ExecutionPolicy. наприклад:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force

Перевіримо поточні настройки ExecutionPolicy для всіх областей:

Get-ExecutionPolicy -List

Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Bypass
CurrentUser Undefined
LocalMachine RemoteSigned

Get-ExecutionPolicy scopes області дії

Значення політики виконання, які ви задаєте за допомогою командлета Set-ExecutionPolicy для областей CurrentUser і LocalMachine, зберігаються в реєстрі. Наприклад, виконайте командлет:

Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Restricted –Force

Відкрийте гілку реєстру HKEY_LOCAL_MACHINE SOFTWARE Microsoft PowerShell 1 ShellIds Microsoft.PowerShell і перевірте значення REG_SZ параметра Виконання. Воно змінилося на Restricted (допустимі значення параметра Restricted, AllSigned, RemoteSigned, Bypass, Unrestricted і Undefined).

ExecutionPolicy в реєстрі

Аналогічні настройки для області CurrentUser знаходяться в розділі реєстру користувача HKEY_CURRENT_USER SOFTWARE Microsoft PowerShell 1 ShellIds Microsoft.PowerShell.

Відзначимо, що найчастіше в корпоративному середовищі використовується ExecutionPolicy зі значенням AllSigned на рівні LocalMachine. Це забезпечує максимальний баланс між безпекою та зручністю. Для особистого користування на комп’ютері можна використовувати RemoteSigned. Ну а Bypass політику краще використовувати тільки для запуску окремих завдань (наприклад для запуску скриптів через GPO або завдань планувальника).

Налаштування PowerShell Execution Policy за допомогою групових політик

Ви можете налаштувати політику виконання PowerShel скриптів на серверах або комп’ютерах домену за допомогою групових політик.

  1. За допомогою редактора доменних GPO (gpmc.msc) створіть нову GPO (або відредагуйте) існуючу і призначте її на OU з комп’ютерами, до яких потрібно застосувати політику запуску PowerShell скриптів;
  2. У редакторі політики перейдіть в розділ Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Windows PowerShell і знайдіть політику Увімкніть виконання сценарію (Включити виконання сценаріїв);

    Аналогічна політика є в призначеному для користувача розділі GPO – User Configuration, але політика комп’ютера має пріоритет.

  3. Для політики доступні три значення:
    • Дозволити лише підписані сценарії (Дозволяти тільки підписані сценарії) – відповідає політиці AllSigned;
    • Дозволити локальні сценарії та віддалено підписані сценарії (Дозволяти локальні і віддалені підписані сценарії) – відповідає політиці PS RemoteSigned;
    • Дозволити всі сценарії (Дозволяти все сценарії) – політика Unrestricted. групова політика Turn on Script Execution
  4. Виберіть необхідне значення політики, збережіть GPO і обновіть політики на комп’ютері.
  5. Перевірте, що для області MachinePolicy тепер діють нові настройки виконання. политка executionpolicy налаштована через пзх

Після настройки політики виконання через GPO ви не зможете змінити налаштування політики виконання скриптів вручну. При спробі змінити налаштування Execution Policy на комп’ютері, на який застосовується така GPO, з’явиться помилка:

Set-ExecutionPolicy : Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope. Due to the override, your shell will retain its current effective execution policy of RemoteSigned. Type "Get-ExecutionPolicy -List" to view your execution policy settings.

Set-ExecutionPolicy: Windows PowerShell успішно оновила вашу політику виконання, але параметр замінено політикою, визначеною в більш конкретному обсязі

Способи обходу політики PowerShell Execution

Є кілька трюків, які можуть допомогти вам, коли потрібно запустити на комп’ютері PowerShell скрипт, не змінюючи настройки політики виконання. Наприклад, я хочу запустити простий PS1 скрипт, який перевіряє, що запущений з правами адміністратора.

Можна за допомогою Get-Content отримати вміст скрипта і перенаправити його в стандартниq потік введення консолі PS.

Get-Content c:pscheck_process_elevation.ps1 | PowerShell.exe -noprofile –

Або можна запустити новий процес powershell.exe з політикою виконання Bypass:

powershell.exe -noprofile -executionpolicy bypass -file c:pscheck_process_elevation.ps1

обхід дії powershell execution політики

Leave a Reply

Your email address will not be published. Required fields are marked *