Ошибка "скрипты заблокированы в системе" в PowerShell исправляется изменением политики выполнения скриптов через команду Set-ExecutionPolicy. По умолчанию Windows запрещает запуск незаверенных скриптов в целях безопасности, но эту политику можно временно или постоянно изменить с правами администратора.
Причины проблемы
- Windows по умолчанию устанавливает политику выполнения
Restricted, которая полностью блокирует запуск всех скриптов PowerShell - Политика
AllSignedразрешает только скрипты, подписанные цифровой подписью, что блокирует большинство локальных скриптов разработчика - Скрипты блокируются даже если они находятся на локальном компьютере и созданы пользователем, так как Windows считает их потенциально опасными
- При скачивании скрипта из интернета Windows автоматически отмечает его как опасный файл, что также блокирует его выполнение
- Обновления Windows иногда сбрасывают политику выполнения на значение по умолчанию, что вызывает повторное появление ошибки
- Если PowerShell запущен без прав администратора, некоторые изменения политики выполнения будут невозможны
- Корпоративные политики GPO (Group Policy Object) могут переопределять локальные настройки политики выполнения
- Использование служебных скриптов, профилей или модулей PowerShell требует разрешение на выполнение скриптов
Пошаговая инструкция
- Откройте меню
Пуски найдите приложениеPowerShell - Кликните правой кнопкой мыши на
Windows PowerShellи выберитеЗапустить от имени администратора - Если появится диалог контроля учётных записей, нажмите
Дадля подтверждения запуска с правами администратора - Проверьте текущую политику выполнения, выполнив команду
Get-ExecutionPolicy - Дождитесь вывода текущей политики (например,
Restricted,AllSignedилиRemoteSigned) - Для временного разрешения выполнения скриптов в текущей сессии выполните
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process - Введите
Y(Yes) и нажмитеEnterдля подтверждения изменения политики - Для постоянного изменения политики выполните
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser - Подтвердите изменение, введя
Yи нажавEnter - Проверьте, что политика была изменена, выполнив
Get-ExecutionPolicyещё раз - Убедитесь, что выводится
RemoteSignedвместоRestricted - Если нужна полная разрешительная политика, выполните
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser - Закройте PowerShell и откройте его заново для применения изменений политики
- Попытайтесь запустить ваш скрипт, используя команду
.\имя-скрипта.ps1 - Если скрипт был скачан из интернета, кликните на файл правой кнопкой мыши и выберите
Свойства - В окне свойств найдите кнопку
Разблокироватьвнизу и нажмите на неё - Нажмите
Применитьи затемOKдля сохранения изменений - После разблокировки файла попытайтесь запустить скрипт снова через PowerShell
- Если возникает ошибка при выполнении скрипта, убедитесь, что путь к скрипту указан с префиксом
..\(например,.\скрипт.ps1) - Для просмотра всех доступных политик выполните
Get-ExecutionPolicy -List - Обратите внимание на разные уровни политики:
MachinePolicy,UserPolicy,Process,CurrentUserиLocalMachine - Если политика переопределяется на уровне
MachinePolicy, это означает, что используется корпоративная политика GPO - Для проверки в корпоративной среде обратитесь к администратору IT для изменения группировки политик
- Если нужно временно запустить один скрипт, используйте команду
powershell -ExecutionPolicy Bypass -File путь\к\скрипту.ps1 - Для возврата к более строгой политике выполните
Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope CurrentUser
Часто задаваемые вопросы
Какая разница между RemoteSigned и Unrestricted? Политика RemoteSigned разрешает локальные скрипты и подписанные удалённые скрипты, а Unrestricted разрешает все скрипты без проверки подписей, что менее безопасно.
Почему мой скрипт всё ещё не запускается после изменения политики? Проверьте, что файл скрипта не был разблокирован (кликните правой кнопкой на файл > Свойства > Разблокировать), и что PowerShell перезапущен после изменения политики.
Как вернуть политику выполнения на значение по умолчанию? Выполните команду Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope CurrentUser для восстановления стандартной защиты.