Як виправити помилку «Execution Policy Restricted» у Windows PowerShell

Найбезпечніший спосіб виправити помилку «Execution Policy Restricted» у Windows PowerShell — це не копіювати найширшу команду, яку ви знайдете. Спочатку визначте, яка політика виконання дійсно діє, а потім оберіть найвужчу зміну, яка відповідає тому, що ви намагаєтеся запустити.

Поточна документація Microsoft також наголошує на важливості контексту версії. Документація Windows PowerShell 5.1 вказує Restricted як політику виконання за замовчуванням для клієнтських комп’ютерів Windows. Поточна документація PowerShell 7.6 визначає Default як RemoteSigned у Windows. Однак, якщо всі області дії мають значення Undefined, Microsoft все одно документує ефективне резервне значення на клієнтських комп’ютерах Windows як Restricted. Практичний висновок простий: не робіть висновків про вашу політику на основі версії Windows або навчального посібника. Виконуйте команди політики на машині, де виникає помилка.

Цей посібник порівнює основні способи виправлення за областю дії, стійкістю, впливом на адміністрування та моделлю довіри. Мета полягає в тому, щоб запустити легітимний скрипт, не послаблюючи систему більше, ніж необхідно.

Що насправді означає помилка Restricted

За політики Restricted PowerShell дозволяє виконувати окремі команди, але не дозволяє запускати файли скриптів. Це включає скрипти PowerShell та пов’язані з ними файли конфігурації або скрипти модулів. Microsoft описує політику виконання як функцію безпеки, яка контролює умови завантаження скриптів і файлів конфігурації. Це не є межею безпеки; Microsoft явно зазначає, що користувач все одно може вводити команди в інтерактивному режимі. Прочитайте поточну документацію about_Execution_Policies для PowerShell 7.6 та документацію політики виконання Windows PowerShell 5.1.

Консоль Windows PowerShell, що показує файл script.ps1, заблокований, оскільки запуск скриптів вимкнено в системі

Типова помилка повідомляє, що файл .ps1 не може бути завантажений, оскільки запуск скриптів вимкнено; зафіксуйте точне повідомлення перед зміною політики.

Це розрізнення важливе. Політика виконання може допомогти запобігти випадковому запуску скриптів, але встановлення RemoteSigned або Bypass не робить скрипт надійним. Спочатку перегляньте скрипт і його джерело.

Крок 1: визначте ефективну політику та кожну область дії

Виконайте ці дві команди:

Get-ExecutionPolicy

Get-ExecutionPolicy -List

Перша повертає ефективну політику для поточної сесії. Друга перелічує політики, застосовані на рівнях MachinePolicy, UserPolicy, Process, CurrentUser та LocalMachine. Microsoft рекомендує саме Get-ExecutionPolicy -List для перегляду політик, які можуть впливати на сесію. Див. Get-ExecutionPolicy.

Windows PowerShell, що відображає Get-ExecutionPolicy -List з областями MachinePolicy, UserPolicy, Process, CurrentUser та LocalMachine

Перевіряйте всі області дії, замість того щоб вважати, що значення LocalMachine є тим, що контролює сесію.

Якщо MachinePolicy або UserPolicy визначені, зупиніться, перш ніж намагатися застосувати локальний обхідний шлях. Ці значення надходять із групової політики та можуть перевизначати налаштування політики виконання, зроблені за допомогою PowerShell. На керованому робочому комп’ютері правильним наступним кроком зазвичай є дотримання процесу організації або звернення до ІТ-відділу.

Обирайте виправлення за потребою, а не за найкоротшою командою

ВаріантСтійкістьАдміністративні праваОсновний компромісНайкраще застосування
Unblock-File при використанні RemoteSignedДля конкретного файлуЗазвичай не потребує підвищення прав для вашого власного файлуВи явно довіряєте одному завантаженому файлу; інші завантажені непідписані файли залишаються під дією RemoteSignedОдин переглянутий скрипт, завантажений з Інтернету
Process RemoteSignedЛише поточний процес PowerShellБез зміни LocalMachineНизька стійкість, але завантажені непідписані файли все одно можуть потребувати розблокуванняТимчасова сесія розробки або усунення несправностей
CurrentUser RemoteSignedЗберігається для вашого облікового запису користувачаНе потребує зміни для всіх користувачівЗручно для регулярного локального скриптингу; ширше, ніж зміна на одну сесіюОсобиста робоча станція розробника
LocalMachine RemoteSignedЗберігається для всіх користувачівПотребує підвищення правШирший вплив на весь комп’ютерСпільний комп’ютер, де адміністратор навмисно хоче застосувати ту саму політику для всіх користувачів
AllSignedЗалежить від області діїЗалежить від області діїВимагає підписів навіть для локально створених скриптів; додає накладні витрати на сертифікати та процес підписанняОрганізації з процесом підписання коду
BypassЗалежить від області дії; зазвичай використовується на рівні ProcessЗалежить від області діїБлокування скриптів, попереджень або запитів від політики виконання відсутніКонтрольована автоматизація з власною моделлю довіри та безпеки, а не випадкове постійне налаштування

Крок 2: використовуйте права адміністратора лише для змін на рівні всього комп’ютера

Вам не потрібно відкривати PowerShell з підвищеними правами лише для зміни області дії CurrentUser або Process. Microsoft зазначає, що підвищення прав необхідне при зміні політики для локального комп’ютера, тобто LocalMachine. Це корисний компроміс: якщо лише вашому обліковому запису потрібен локальний скриптинг, зміна політики для всіх користувачів додає область дії без додаткової вигоди.

Результати пошуку Windows для Windows PowerShell з виділеною опцією «Запуск від імені адміністратора»

Запуск від імені адміністратора доречний для навмисної зміни LocalMachine, але він не потрібен для областей дії Process або CurrentUser.

Рекомендація за потребою: використовуйте CurrentUser для облікового запису розробника, який регулярно запускає локально створені скрипти. Зберігайте LocalMachine для адміністратора, який навмисно хоче, щоб таке саме налаштування впливало на всіх користувачів.

Крок 3: для регулярного локального скриптингу розгляньте CurrentUser RemoteSigned

Для багатьох особистих машин для розробки практичним постійним вибором є:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

RemoteSigned дозволяє запускати локальні скрипти без вимоги підпису, тоді як скрипти, позначені як завантажені з Інтернету, потребують довіреного цифрового підпису, якщо ви явно не розблокуєте файл. Це зберігає корисне розрізнення між кодом, який ви створили локально, і кодом, отриманим з іншого джерела.

Windows PowerShell від імені адміністратора, що показує команду Set-ExecutionPolicy RemoteSigned та запит на підтвердження зміни політики виконання

Ця ілюстрація показує команду RemoteSigned для всього комп’ютера, оскільки область дії пропущена; LocalMachine є областю дії за замовчуванням. Краще вказувати область дії явно, щоб вплив був навмисним.

Поширеною помилкою є запуск Set-ExecutionPolicy RemoteSigned без -Scope. Microsoft документує LocalMachine як область дії за замовчуванням при встановленні політики виконання. Саме тому краще бути конкретним:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Зміна набуває чинності негайно; PowerShell не потрібно перезапускати для змін CurrentUser або LocalMachine.

Крок 4: для тимчасової сесії надавайте перевагу політиці на рівні Process

Якщо ви усунюєте несправності або запускаєте довірений локальний скрипт один раз, уникайте постійних змін для користувача або комп’ютера. Вужчим варіантом є:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned

Область дії Process застосовується лише до поточної сесії PowerShell. Microsoft зазначає, що вона зберігається в змінній середовища $Env:PSExecutionPolicyPreference і видаляється при закритті процесу.

Якщо більший додаток, інсталятор або контрольоване середовище автоматизації вже має власну модель безпеки, PowerShell також надає Bypass:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

Windows PowerShell, що показує Set-ExecutionPolicy на рівні Process з Bypass та Get-ExecutionPolicy -List, що відображає Process Bypass

Bypass на рівні Process зникає, коли процес PowerShell закривається, але він також видаляє попередження та блокування політики виконання для цієї сесії.

Компроміс: область дії Process мінімізує стійкість, але Bypass є ширшим, ніж RemoteSigned всередині цієї сесії. Microsoft описує Bypass як такий, що нічого не блокує і не показує попереджень чи запитів, і зазначає, що він призначений для сценаріїв, де інший додаток надає модель безпеки. Для нормальної інтерактивної сесії усунення несправностей спочатку використовуйте Process RemoteSigned, якщо у вас немає конкретної причини для Bypass.

Для окремого одноразового процесу Windows PowerShell ви також можете запустити:

powershell.exe -ExecutionPolicy RemoteSigned -File .\script.ps1

Для PowerShell 7 виконуваний файл — це pwsh.exe. Налаштування політики виконання через командний рядок все одно не перевизначає політику виконання, нав’язану груповою політикою.

Крок 5: якщо RemoteSigned блокує завантажений скрипт, розблокуйте лише цей файл

RemoteSigned по-різному обробляє файли, позначені як такі, що походять з Інтернету. Microsoft документує командлет Unblock-File як такий, що видаляє цю позначку зони Інтернету, дозволяючи переглянутому непідписаному скрипту запускатися під дією RemoteSigned.

Спочатку огляньте скрипт. Якщо ви довіряєте джерелу і переглянули вміст, виконайте:

Unblock-File -Path .\script.ps1

Ви також можете використати прапорець Unblock у діалоговому вікні властивостей файлу. Microsoft стверджує, що Unblock-File виконує ту саму базову операцію. Див. Unblock-File.

Діалогове вікно властивостей файлу Windows для script.ps1, що показує розділ безпеки та прапорець Unblock

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

Ви можете перевірити, чи має файл альтернативний потік даних Zone.Identifier, за допомогою:

Get-Item .\script.ps1 -Stream Zone.Identifier -ErrorAction SilentlyContinue

Microsoft зазначає, що методи завантаження не завжди позначають файли однаково, тому відсутність цього потоку не є доказом того, що скрипт безпечний.

Крок 6: використовуйте AllSigned, якщо в організації є процес підписання

AllSigned вимагає, щоб усі скрипти та файли конфігурації були підписані довіреним видавцем, включаючи скрипти, створені локально. Це надає організації послідовний процес довіри до видавця, але також створює операційні накладні витрати: скрипти потребують підписів Authenticode, а користувачі повинні довіряти відповідним видавцям.

Документація Microsoft about_Signing пояснює, як PowerShell перевіряє підписи скриптів і як працюють запити щодо довірених видавців.

Рекомендація за потребою: AllSigned має сенс, якщо ваша організація вже має сертифікати підписання коду, контроль публікації та процес оновлення підписаних скриптів. Для окремого розробника, який пише локальні утилітарні скрипти, RemoteSigned зазвичай пов’язаний з меншими тертями, зберігаючи при цьому перевірку походження з Інтернету.

Крок 7: не боріться з груповою політикою на керованому ПК

PowerShell надає дві області дії політики, які надходять із групової політики: MachinePolicy та UserPolicy. Документація Microsoft щодо групової політики стверджує, що налаштування Turn on Script Execution може нав’язувати поведінку Restricted, RemoteSigned або AllSigned для керованих користувачів і комп’ютерів. Це налаштування знаходиться за шляхом:

Administrative Templates\Windows Components\Windows PowerShell

Див. about_Group_Policy_Settings.

Якщо Get-ExecutionPolicy -List показує визначені MachinePolicy або UserPolicy, локальна команда Set-ExecutionPolicy може не дати очікуваної ефективної поведінки. Практичним рішенням є запит відповідної політики у адміністратора, використання підписаного скрипту, якщо це потрібно, або використання затвердженого методу розгортання.

Крок 8: відновіть налаштування, яке ви дійсно змінили, а потім перевірте

Перед зміною постійної області дії запишіть її поточне значення:

Get-ExecutionPolicy -Scope CurrentUser

Get-ExecutionPolicy -Scope LocalMachine

Якщо пізніше вам потрібно буде видалити значення політики, яке ви встановили, Microsoft документує встановлення цієї області дії як Undefined:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Undefined

Не запускайте навмання Set-ExecutionPolicy Restricted лише тому, що це показано на скріншоті. Без вказівки області дії команда за замовчуванням націлена на LocalMachine, і «Restricted» могло не бути попереднім значенням цієї області дії.

Windows PowerShell, що показує запит на підтвердження зміни політики на Restricted

Скріншот ілюструє зміну на Restricted, але реальне відкочування повинно відновити область дії та значення, які ви записали, а не вгадувати попередню конфігурацію.

Нарешті, перевірте як ефективну політику, так і скрипт:

Get-ExecutionPolicy

Get-ExecutionPolicy -List

.\script.ps1

Windows PowerShell успішно запускає script.ps1 і повертає повідомлення «Script ran successfully»

Успішний запуск скрипту підтверджує, що безпосередній симптом усунено; повторно перевірте список політик, щоб переконатися, що ви не залишили ширшу область дії зміненою ненавмисно.

Яке виправлення вам слід обрати?

Ваша ситуаціяРекомендована початкова точкаЧому
Ви завантажили один скрипт з джерела, якому довіряєтеЗалиште RemoteSigned і використовуйте Unblock-File після переглядуЗмінює довіру для одного файлу, а не для всіх скриптів
Вам потрібні скрипти лише в поточній сесії усунення несправностейProcess RemoteSignedЗакривається разом із сесією і зберігає обмеження щодо походження з Інтернету
Ви регулярно пишете та запускаєте власні скриптиCurrentUser RemoteSignedПостійна зручність для одного користувача без впливу на всіх на ПК
Ви адмініструєте спільну робочу станціюОцініть LocalMachine RemoteSigned або організаційну політикуПослідовна поведінка для всіх користувачів, але ширший вплив
Ваша компанія вимагає скриптів, контрольованих видавцямиAllSigned через процес підписання та політики організаціїПослідовна вимога до підписів ціною накладних витрат на підписання
Інсталятор або контрольована система автоматизації має власну модель безпекиРозгляньте Bypass на рівні ProcessПризначено для контрольованих сценаріїв хоста; уникайте робити це випадковим постійним значенням за замовчуванням
Визначено MachinePolicy або UserPolicyДотримуйтесь ІТ або групової політикиЛокальні зміни області дії не є правильним повноваженням

Поширені помилки, які створюють більшу проблему, ніж початкова помилка

  • Встановлення Unrestricted або Bypass назавжди лише для запуску одного скрипту. Це розширює те, що може виконуватися, тоді як вужча зміна на рівні Process, CurrentUser або для конкретного файлу може вирішити проблему.
  • Запуск кожної команди від імені адміністратора. Зміни CurrentUser і Process не потребують зміни політики LocalMachine.
  • Ігнорування групової політики. Якщо пристрій керований, політика може бути навмисною, і локальна зміна іншої області дії не замінює організаційний контроль.
  • Розблокування скрипту без його читання. Unblock-File видаляє блокування за походженням з Інтернету; він не перевіряє код.
  • Припущення, що підписаний скрипт автоматично безпечний. Microsoft зазначає, що підписаний код все одно може бути шкідливим; підписи встановлюють інформацію про видавця та цілісність, а не гарантію безпечної поведінки.
  • Забування про те, яку область дії ви змінили. Команда без -Scope може вплинути на LocalMachine, тоді як зміна Process зникає при виході.

Підсумок

Для більшості особистих скриптів у Windows CurrentUser RemoteSigned є розумним постійним вибором, коли ви регулярно запускаєте локально створені скрипти, тоді як Unblock-File є вужчим вибором для одного переглянутого скрипту, завантаженого з Інтернету. Для тимчасової сесії усунення несправностей Process RemoteSigned мінімізує стійкість. Bypass має легітимну роль у контрольованій автоматизації, але його компроміс полягає в тому, що блокування та попередження політики виконання видаляються для цього процесу. На керованих комп’ютерах до групової політики слід ставитися як до авторитету, а не як до перешкоди, яку потрібно обійти.

Отже, найкраще виправлення — це не одна політика для всіх. Це найменша область дії та найменш дозвільна поведінка, яка все ще підтримує запуск потрібного вам довіреного скрипту.

Залишити коментар

Як виправити помилку “Prisma Client Has Not Been Generated Yet”

Як виправити помилку “Prisma Client Has Not Been Generated Yet”

Виправте помилку незгенерованого Prisma Client, перевіривши генератор, схему, шлях виводу, імпорти, версії, налаштування монорепозиторію та кроки збірки під час розгортання.

Як виправити помилку SSL-сертифіката: не вдалося отримати локальний сертифікат емітента в Git

Як виправити помилку SSL-сертифіката: не вдалося отримати локальний сертифікат емітента в Git

Виправте помилку Git «не вдалося отримати локальний сертифікат емітента», визначивши механізм довіри, встановивши правильний ланцюжок ЦС та зберігаючи перевірку SSL увімкненою.

Як виправити помилку таймауту мережі MongoDB у з'єднанні Mongoose

Як виправити помилку таймауту мережі MongoDB у з'єднанні Mongoose

Виправте помилки таймауту мережі MongoDB у Mongoose, визначивши тип таймауту, перевіривши доступність Atlas або TCP, виправивши URI та налаштувавши таймаути лише за необхідності.

Як виправити помилку «Execution Policy Restricted» у Windows PowerShell

Як виправити помилку «Execution Policy Restricted» у Windows PowerShell

Виправте помилку обмеженої політики виконання PowerShell, перевіривши область дії та групову політику, а потім обравши RemoteSigned, Unblock-File або тимчасовий параметр сесії.

Як виправити помилку npm ERR! code ERESOLVE: конфлікт залежностей-партнерів

Як виправити помилку npm ERR! code ERESOLVE: конфлікт залежностей-партнерів

Виправте конфлікти залежностей-партнерів npm ERESOLVE, визначивши несумісний діапазон пакетів, узгодивши версії, використовуючи npm explain та npm ls, а також розглядаючи legacy-peer-deps або force лише як контрольовані резервні варіанти.

Як виправити помилку підключення Redis до 127.0.0.1:6379

Як виправити помилку підключення Redis до 127.0.0.1:6379

Виправте помилки відмови у підключенні Redis на 127.0.0.1:6379, перевіривши сервер, порт, мережу Docker, redis.conf, автентифікацію та TLS.

Як виправити внутрішню помилку 500 у серверних компонентах Next.js

Як виправити внутрішню помилку 500 у серверних компонентах Next.js

Виправте помилки 500 у серверних компонентах Next.js, аналізуючи логи сервера, перевіряючи запити даних та змінні середовища, обробляючи помилки та перевіряючи збірку для продакшену.

Як виправити помилку CrashLoopBackOff у Kubernetes у локальному Minikube

Як виправити помилку CrashLoopBackOff у Kubernetes у локальному Minikube

Діагностуйте та виправляйте помилку CrashLoopBackOff у Kubernetes у локальному Minikube, перевіряючи стан пода, попередні логи, причини завершення роботи, проби, конфігурацію, ліміти пам’яті та стан кластера.

Як виправити помилку «Docker Desktop Engine Stopped» у Windows 11

Як виправити помилку «Docker Desktop Engine Stopped» у Windows 11

Виправте помилку «Docker Desktop Engine Stopped» у Windows 11, перевіривши статус Docker, оновивши та перезавантаживши WSL 2, підтвердивши віртуалізацію та використавши діагностику перед скиданням налаштувань.

Як виправити помилку Uncaught ReferenceError: process is not defined у Vite

Як виправити помилку Uncaught ReferenceError: process is not defined у Vite

Виправте помилку 'process is not defined' у Vite, замінивши використання process.env у стилі Node.js, правильно налаштувавши змінні VITE_ та перевіривши залежності.