«Невозможно загрузить файл …, так как выполнение сценариев отключено в этой системе» — так PowerShell отказывается запускать файл .ps1. Чаще всего это скрипт активации виртуального окружения Python .venv\Scripts\Activate.ps1 или npm.ps1 в терминале VS Code. В Windows 11 запуск сценариев PowerShell по умолчанию запрещён политикой выполнения Restricted. Это не вирус и не поломка: команды по одной вводить можно, а файлы-сценарии — нельзя.
Исправление — одна команда, которая разрешает твои собственные скрипты только твоей учётной записи. Ниже разобрано, что именно она меняет, как обойтись без неё и что делать со скачанными скриптами. Вывод снят на Windows 11 24H2 с русским интерфейсом.
Какая политика выполнения действует
Как выглядит ошибка
Файл hello.ps1 из папки C:\tools в чистой Windows 11 не запускается:
.\hello.ps1
.\hello.ps1 : Невозможно загрузить файл C:\tools\hello.ps1, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https:/go.microsoft.com/fwlink/?LinkID=135170.
+ CategoryInfo : Ошибка безопасности: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
В окне PowerShell сообщение переносится по ширине окна, а между первой строкой и CategoryInfo стоит строка с позицией. С виртуальным окружением Python текст тот же, только путь другой — к .venv\Scripts\Activate.ps1.
Почему так: политика выполнения
Какие скрипты разрешено запускать, решает политика выполнения. Текущую показывает Get-ExecutionPolicy, а значения по всем областям — ключ -List:
Get-ExecutionPolicy
Get-ExecutionPolicy -List
Restricted
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
Ни в одной области политика не задана, и Windows 11 применяет значение по умолчанию — Restricted: отдельные команды выполняются, файлы .ps1 нет. Области проверяются сверху вниз, и побеждает первое заданное значение. MachinePolicy и UserPolicy задаёт администратор через групповые политики, и их не перебить командой.
Как исправить: RemoteSigned для себя
Разреши запуск скриптов только своей учётной записи:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine Undefined
Если PowerShell попросит подтвердить изменение, согласись. Права администратора не нужны: меняется только область CurrentUser. Именно эту команду для Activate.ps1 приводит документация Python. Теперь скрипт запускается:
.\hello.ps1
hello from hello.ps1
RemoteSigned значит: свои скрипты запускаются как есть, а скачанные из интернета — только с цифровой подписью.
Только на один раз: Bypass для текущего окна
Если менять настройку не хочется, разреши скрипты лишь в текущем окне PowerShell — до его закрытия:
Set-ExecutionPolicy -Scope Process Bypass
Тот же эффект даёт запуск отдельного процесса powershell -ExecutionPolicy Bypass. При следующем открытии терминала снова будет Restricted.
Скачанный скрипт: не имеет цифровой подписи
Windows помечает файлы, скачанные из интернета. При RemoteSigned такой скрипт без подписи по-прежнему не запустится, но сообщение будет другим:
.\downloaded.ps1 : Не удается загрузить файл C:\tools\downloaded.ps1. Файл C:\tools\downloaded.ps1 не имеет цифровой подписи. Невозможно выполнить сценарий в указанной системе. Для получения дополнительных сведений о выполнении сценариев и настройке политики выполнения см. about_Execution_Policies по адресу https:/go.microsoft.com/fwlink/?LinkID=135170.
Если ты доверяешь источнику, сними пометку — и скрипт запустится:
Unblock-File .\downloaded.ps1
.\downloaded.ps1
hello from hello.ps1
Без PowerShell-скриптов вовсе
Активировать виртуальное окружение можно и без Activate.ps1:
- в командной строке (cmd) —
.venv\Scripts\activate.bat, политика выполнения на неё не действует; - в любой оболочке — сразу через Python окружения:
.venv\Scripts\python.exe main.pyи.venv\Scripts\python.exe -m pip install requests. Подробнее — в статье о виртуальном окружении.
С npm то же самое: в PowerShell команда npm запускает скрипт npm.ps1 из папки Node.js, а npm.cmd — обычный командный файл, на который политика не распространяется.
Ошибки, на которых спотыкаются
Set-ExecutionPolicy Unrestricted без области. Без -Scope команда меняет LocalMachine — для всех пользователей, и требует прав администратора. А Unrestricted разрешает и скачанные скрипты без подписи. Для учёбы и разработки достаточно RemoteSigned для CurrentUser.
Политика не меняется, хотя команда прошла. Значит, она задана в MachinePolicy или UserPolicy — групповой политикой, как на рабочих и школьных компьютерах. Это видно в Get-ExecutionPolicy -List. Здесь помогают способы без .ps1: activate.bat или Python окружения напрямую.
Терминал VS Code открыт со старыми настройками. После смены политики открой новый терминал — уже открытый ничего не узнает.
Частые вопросы
Безопасно ли включать RemoteSigned
Для своей учётной записи — да, это разумный режим для разработки: свои и проверенные скрипты работают, а скачанные без подписи — нет, пока ты сам не снимешь с них пометку.
Чем это отличается от «не распознано как имя командлета»
Там PowerShell не нашёл программу вовсе, а здесь нашёл скрипт, но ему запрещено его запускать. Разбор первой ошибки — в статье «Не является внутренней или внешней командой».