Как включить выполнение скриптов PowerShell в Windows

PowerShell по умолчанию блокирует выполнение скриптов как мера безопасности. В этой статье подробно показаны способы проверки, включения, изменения и временного обхода политики выполнения (execution policy) в Windows, а также рекомендации по безопасной настройке и отладке.
Как проверить текущую политию выполнения

Понимание текущей политики выполнения необходимо перед изменением настроек. Выполните следующие шаги:
- Откройте Windows PowerShell с правами администратора.
- Введите команду и нажмите Enter:
get-executionpolicy- Обычно, если вы видите ошибку при запуске .ps1-файла, команда вернёт Restricted — это означает, что выполнение скриптов отключено.
- Чтобы увидеть политику во всех областях (scopes), выполните:
get-executionpolicy -listВажно: значение для каждого Scope (Process, CurrentUser, LocalMachine, MachinePolicy, UserPolicy) может отличаться — PowerShell использует приоритетную схему, и значение с более высоким приоритетом будет применено.
Как включить выполнение через «Параметры» в Windows
Вы можете переключить политику на RemoteSigned через интерфейс «Параметры» в разделе для разработчиков. Этот способ удобен, если вы не хотите работать в командной строке.
Шаги:
- Нажмите Win + I, чтобы открыть «Параметры».
- Выберите раздел “Конфиденциальность и безопасность” (Privacy & Security).
- Откройте раздел “Для разработчиков” (For developers).

- Разверните секцию PowerShell и переключите опцию, чтобы разрешить локальное выполнение скриптов без подписи и требовать подпись только для удалённых скриптов.
- После изменения откройте PowerShell и проверьте:
get-executionpolicyОжидаемое значение для текущего пользователя теперь — RemoteSigned. Чтобы отменить этот параметр, верните переключатель в положение Off.
Важно: интерфейс «Параметры» обычно устанавливает политику для уровня CurrentUser; для установки системных/групповых политик используйте Group Policy или командлеты PowerShell.
Как разрешить запуск скриптов через PowerShell

Командный способ даёт больше контроля: вы можете задать политику для CurrentUser, LocalMachine или только для текущего процесса.
- Откройте PowerShell от имени администратора.
- Чтобы установить политику для всех пользователей:
Set-ExecutionPolicy RemoteSignedЕсли будет запрос на подтверждение, нажмите “A” (Yes to All).
- Чтобы установить политику только для текущего пользователя, укажите Scope:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser- Чтобы применить настройку только к текущему сеансу (временная настройка):
Set-ExecutionPolicy RemoteSigned -Scope Process- Если вы не хотите видеть запрос подтверждения, добавьте флаг -Force:
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine -ForceПримечание: используйте RemoteSigned, если требуется запуск локальных скриптов без подписи и проверка подписи для скачанных из интернета.
Как отключить выполнение скриптов в PowerShell

Чтобы вернуть состояние по умолчанию или отключить выполнение скриптов, можно установить политику в Undefined или Restricted в зависимости от нужд.
Пример для установки Undefined для всех пользователей:
Set-ExecutionPolicy UndefinedДля установки для текущего пользователя:
Set-ExecutionPolicy Undefined -Scope CurrentUserПосле установки Undefined PowerShell будет действовать в соответствии с политиками, заданными на уровне системы или через Group Policy (если они присутствуют).
Понимание политик выполнения и областей
Политики управления выполнением скриптов контролируют, какие скрипты PowerShell может запускать. Короткие определения:
- Restricted — не позволяет запускать .ps1-файлы (команды можно вводить вручную).
- AllSigned — запускает только подписанные скрипты от доверенных издателей.
- RemoteSigned — локальные скрипты запускаются без подписи; скачанные из сети требуют цифровой подписи.
- Unrestricted — разрешает запуск неподписанных скриптов, но при запуске скачанных из интернета показывает предупреждение.
- Bypass — никакие проверки не выполняются; полезно для автоматизированных сценариев, но рискованно.
- Undefined — политика не задана явно; применяется политика по умолчанию или политика Group Policy.
Таблица: политики и краткие пояснения
| Политика | Описание |
| RemoteSigned | Разрешает выполнение локально созданных скриптов; требует подпись для файлов, загруженных из интернета. |
| AllSigned | Разрешает только подписанные скрипты. |
| Bypass | Полная отмена проверок выполнения. |
| Unrestricted | Разрешает неподписанные скрипты с предупреждением для загруженных файлов. |
| Restricted | Отключено выполнение скриптов; возможен запуск отдельных команд. |
| Undefined | Политика не задана явно; действует дочерняя политика. |
Области (scopes) — где действует политика:
| Scope | Описание |
| Process | Действует только в текущей сессии PowerShell; теряется при закрытии окна. |
| CurrentUser | Действует только для текущего пользователя. |
| LocalMachine | Действует для всех пользователей на машине. |
| UserPolicy | Задаётся через групповую политику для пользователя. |
| MachinePolicy | Задаётся через групповую политику для компьютера. |
Рекомендуемая модель принятия решений: если нужно быстро и безопасно тестировать локальные скрипты — используйте CurrentUser или Process с RemoteSigned; для централизованного контроля используйте Group Policy.
Обходные пути и когда политика не помогает
Иногда менять политику глобально неудобно. Есть безопасные и контролируемые обходы:
- Однократный запуск скрипта без изменения системной политики:
powershell.exe -ExecutionPolicy Bypass -File "C:\путь\скрипт.ps1"- Запуск командной строки PowerShell с обходом политики для текущего запуска:
PowerShell -NoProfile -ExecutionPolicy Bypass- Вставить текст скрипта прямо в интерактивный сеанс консоли (в этом случае файл не загружается из внешнего источника).
Когда эти обходы полезны:
- Скрипт нужен однократно и не оправдана долговременная смена политики.
- Нет прав администратора для смены LocalMachine.
Когда обход опасен или не подходит:
- Когда требуется централизованный контроль безопасности (сеть организации). Тогда следует использовать Group Policy и AllSigned.
- Если скрипты поступают из ненадёжных источников — обход увеличивает риск выполнения вредоносного кода.
Проверка и отладка после изменения политики
- Создайте простой файл test.ps1 с содержимым:
Write-Output "PowerShell script test: OK"- Запустите его в той же сессии, где устанавливали политику:
.\test.ps1Или через полное имя:
powershell.exe -File "C:\путь\test.ps1"- Если появляется ошибка “running scripts is disabled on this system”, проверьте окончательно значения:
get-executionpolicy -list- Для отладки добавляйте -Verbose и -Debug в команду скрипта, а также проверяйте блоки ошибок try/catch внутри скрипта.
Рекомендации по безопасности и лучшие практики
- По возможности не используйте Bypass и Unrestricted в долгосрочной перспективе.
- Для критичных сред используйте AllSigned и подписывайте внутренние скрипты корпоративным сертификатом.
- Внедрите контроль версий и код-ревью для скриптов, которые будут выполняться автоматизированно.
- Ограничьте настройку LocalMachine только администраторам; для разработчиков применяйте CurrentUser или Process.
- Включите аудит и журналирование запуска скриптов при помощи средств EDR/логов.
Важно: изменение политик выполнения не заменяет другие меры защиты (антивирус, контроль доступа, принцип наименьших привилегий).
Чек-листы по ролям
Администратор:
- Проверить текущие Group Policy: MachinePolicy и UserPolicy.
- Установить требуемую политику через Set-ExecutionPolicy или GPO.
- Документировать изменение и уведомить команду.
- Проверить работоспособность автоматизированных задач (Scheduled Tasks, CI/CD).
Разработчик:
- Для локальной разработки использовать RemoteSigned в CurrentUser или Process.
- Подписывать публичные релизы скриптов.
- Тестировать скрипты в изолированной среде перед развёртыванием.
Обычный пользователь:
- Не менять политики на LocalMachine без одобрения ИТ.
- Использовать обход для однократного запуска только при необходимости и с пониманием риска.
Шпаргалка команд (cheat sheet)
get-executionpolicy
get-executionpolicy -list
Set-ExecutionPolicy RemoteSigned
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Set-ExecutionPolicy RemoteSigned -Scope Process
Set-ExecutionPolicy Undefined
powershell.exe -ExecutionPolicy Bypass -File "C:\path\script.ps1"
PowerShell -NoProfile -ExecutionPolicy BypassПримеры типичных ошибок и как их решить
Ошибка: “running scripts is disabled on this system”
- Решение: проверьте get-executionpolicy; если нужно — установите RemoteSigned для CurrentUser или используйте -ExecutionPolicy Bypass для однократного запуска.
Ошибка: “cannot be loaded because running scripts is disabled on this system”
- Решение: убедитесь, что файл не помечен как скачанный из интернета (если помечен — снимите метку в свойствах файла или подпишите файл). Альтернатива — сохранить скрипт на доверенном ресурсе и использовать подписанные версии.
Мини-методология безопасного включения выполнения скриптов
- Оцените потребность: нужна ли политика на уровне LocalMachine или достаточно CurrentUser/Process.
- Проведите тест в тестовой машине: установите RemoteSigned и запустите набор тестовых скриптов.
- Подпишите критичные скрипты либо примите процедуру проверки перед запуском неподписанных скриптов.
- Запишите изменения и мониторьте логи.
- При откате — используйте Set-ExecutionPolicy Undefined или Restricted и проверяйте сервисы.
Диаграмма принятия решения
flowchart TD
A[Нужно запустить скрипт?] --> B{Требуется постоянная настройка?}
B -- Нет --> C[Использовать -ExecutionPolicy Bypass для одностороннего запуска]
B -- Да --> D{Уровень контроля}
D -- Локально для пользователя --> E[Set-ExecutionPolicy RemoteSigned -Scope CurrentUser]
D -- Для всех пользователей --> F[Set-ExecutionPolicy RemoteSigned -Scope LocalMachine]
D -- Централизованный контроль --> G[Настроить Group Policy: AllSigned или RemoteSigned]
C --> H[Выполнить скрипт и протестировать]
E --> H
F --> H
G --> HКритерии приёмки
- Политика настроена на нужном Scope (проверка get-executionpolicy -list).
- Тестовый скрипт успешно выполняется без ошибок о блокировке.
- Документация и уведомления о внесённых изменениях доступны ответственным лицам.
- При использовании подписи — скрипты корректно проверяются и проходят проверку издателя.
Краткое резюме
Включение выполнения скриптов в PowerShell можно сделать безопасно: используйте RemoteSigned и выбирайте правильный Scope (Process/CurrentUser/LocalMachine). Для одноразовых задач применяйте -ExecutionPolicy Bypass, а в корпоративной среде отдавайте предпочтение подписанным скриптам и настройке через Group Policy.
Важно: всегда балансируйте удобство и безопасность — не оставляйте Bypass/Unrestricted включёнными на системах в продакшне.