«Выполнение сценариев отключено в этой системе»: как исправить в PowerShell без риска
Почему PowerShell не даёт активировать venv, запустить npm, yarn или Activate.ps1, и как это исправить: RemoteSigned только для своего пользователя, разовый обход, запуск через cmd. Что делать, если политику задаёт администратор.
.\venv\Scripts\Activate.ps1 : Невозможно загрузить файл C:\project\venv\Scripts\Activate.ps1,
так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений
см. about_Execution_Policies по адресу https:/go.microsoft.com/fwlink/?LinkID=135170.
+ CategoryInfo : Ошибка безопасности: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
В английской Windows то же звучит как cannot be loaded because running scripts is disabled on this system. Обычно ошибка вылезает при активации виртуального окружения Python, при запуске
npm, yarn, pnpm, ng или любого .ps1 из инструкции.
С файлом всё в порядке. Это политика выполнения PowerShell: на домашних версиях Windows
она по умолчанию запрещает запуск любых скриптов .ps1. Исправляется одной командой, но
важно выбрать правильную.
Сначала посмотри, что стоит сейчас
Get-ExecutionPolicy -List
Выведется таблица из пяти уровней:
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Restricted
Действует самый верхний уровень, где стоит не Undefined. Если MachinePolicy или
UserPolicy что-то задают, это групповая политика администратора, и команды ниже её не
перебьют. Про этот случай — в конце статьи.
Исправление: RemoteSigned для своего пользователя
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Подтверди Y. Права администратора не нужны, меняется только твоя учётная запись.
RemoteSigned значит: скрипты, созданные на этом компьютере (в том числе Activate.ps1
внутри твоего venv и npm.ps1, который поставил установщик Node.js), запускаются. Скачанные
из интернета запускаются, только если подписаны. Это разумный баланс, и именно так политика
настроена по умолчанию на Windows Server.
В Windows 11 то же самое переключается мышкой: «Параметры → Система → Для разработчиков → PowerShell», пункт про запуск локальных скриптов без подписи.
Чего не делать. Советы «поставь Unrestricted» или Bypass для LocalMachine снимают
защиту для всех пользователей и всех скриптов, включая скачанные. Для venv и npm это не нужно.
Разовый обход, без изменения настроек
Если менять политику не хочется, разреши скрипты только в текущем окне. Закроешь окно — всё вернётся:
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
.\venv\Scripts\Activate.ps1
Обход без PowerShell вообще
Политика касается только .ps1. У большинства инструментов рядом лежит версия для обычной
командной строки:
| Что падает | Что запустить вместо |
|---|---|
.\venv\Scripts\Activate.ps1 | в cmd: venv\Scripts\activate.bat |
npm install в PowerShell | npm.cmd install |
yarn, pnpm, npx | yarn.cmd, pnpm.cmd, npx.cmd |
| Терминал VS Code | Ctrl+Shift+P → «Terminal: Select Default Profile» → Command Prompt |
Для venv активация вообще необязательна: можно сразу вызывать его Python,
.\venv\Scripts\python.exe main.py и .\venv\Scripts\python.exe -m pip install ....
Если скрипт скачан из интернета
При RemoteSigned скачанный .ps1 без подписи всё равно не запустится, только ошибка будет
другой: «файл не имеет цифровой подписи». Если ты доверяешь источнику и прочитал скрипт, сними
отметку «скачано из интернета»:
Unblock-File -Path .\install.ps1
Отдельно про популярные однострочники вида irm https://... | iex. Они скачивают и сразу
выполняют чужой код, минуя всякие проверки. Запускай такое, только если знаешь, чей это код и
что он делает. Инструкции «активировать Windows одной командой» сюда не относятся — их
запускать не стоит.
Если политику задаёт администратор
Когда в Get-ExecutionPolicy -List заполнены MachinePolicy или UserPolicy, компьютер
управляется групповой политикой, обычно рабочей. Set-ExecutionPolicy выдаст предупреждение,
что настройка переопределена. Тут два честных пути: обходы через cmd и .cmd-файлы из
таблицы выше или просьба к администратору. Ломать корпоративную политику не надо: это
нарушение правил компании, и её всё равно вернут при следующем обновлении политик.
Как с этим работает агент
Дока выполняет команды на Windows через cmd.exe, поэтому политика PowerShell её
собственную работу не блокирует: агент сам запустит activate.bat, npm.cmd или вызовет
Python из venv напрямую. Если нужно поменять политику для тебя, он покажет команду с
-Scope CurrentUser и выполнит её только после подтверждения. Каждую команду ты видишь заранее.
Что дальше, когда окружение активировалось, но скрипт падает на импорте, — в статье про ModuleNotFoundError: No module named.