
По умолчанию Windows ограничивает выполнение PowerShell-скриптов для предотвращения запуска потенциально опасного кода. Политика ExecutionPolicy определяет, какие сценарии можно запускать: Restricted блокирует все скрипты, RemoteSigned требует цифровой подписи для загруженных из интернета файлов, а Unrestricted снимает все ограничения.
Перед изменением политики важно проверить текущие настройки с помощью команды Get-ExecutionPolicy. Для временного запуска скрипта без изменения глобальной политики можно использовать ключ -ExecutionPolicy Bypass при запуске PowerShell.
Для постоянного разрешения скриптов рекомендуется выбирать уровень политики с учетом безопасности и типа учетной записи: CurrentUser изменяет только текущую учетную запись, LocalMachine – для всех пользователей системы. Правильная комбинация этих параметров позволяет запускать собственные скрипты, не снижая защиту Windows для других процессов.
Также важно учитывать, что отдельные файлы, загруженные из интернета, могут быть заблокированы системой. Для их разблокировки используется свойство Unblock-File или снятие флага через контекстное меню файла. Эти меры позволяют контролировать запуск только доверенных скриптов.
Проверка текущей политики выполнения скриптов в PowerShell

Для безопасного запуска скриптов важно знать текущую политику выполнения. PowerShell использует командлет Get-ExecutionPolicy, который возвращает один из следующих уровней:
- Restricted – блокирует все скрипты, разрешая только интерактивные команды.
- RemoteSigned – позволяет запуск локальных скриптов без подписи, а скачанные из интернета требуют цифровой подписи.
- AllSigned – любой скрипт должен иметь доверенную подпись, независимо от источника.
- Unrestricted – разрешает запуск всех скриптов, но при запуске скачанных из интернета предупреждает о риске.
- Bypass – отключает все предупреждения и ограничения.
- Undefined – политика не установлена, PowerShell использует политику вышестоящего уровня.
Для точной диагностики можно проверить политику на уровне отдельных контекстов:
- Process – только текущий сеанс PowerShell.
- CurrentUser – настройки для текущего пользователя.
- LocalMachine – глобальная политика для всех пользователей системы.
Пример команды для проверки всех уровней сразу:
Get-ExecutionPolicy -List
Результат покажет, какая политика применяется в каждом контексте. На основе этой информации можно корректно выбрать способ изменения настроек без ослабления защиты системы.
Изменение политики выполнения для текущего пользователя
Чтобы разрешить запуск скриптов только для своей учетной записи без изменения глобальных настроек системы, используется параметр -Scope CurrentUser командлета Set-ExecutionPolicy. Это позволяет применять политику только к текущему пользователю.
Примеры команд для разных уровней политики:
| Команда | Описание |
|---|---|
| Set-ExecutionPolicy RemoteSigned -Scope CurrentUser | Разрешает запуск локальных скриптов без подписи, а скачанных из интернета требует цифровую подпись. |
| Set-ExecutionPolicy Unrestricted -Scope CurrentUser | Разрешает выполнение всех скриптов, но предупреждает о риске при запуске скачанных файлов. |
| Set-ExecutionPolicy AllSigned -Scope CurrentUser | Требует цифровую подпись для всех скриптов, повышая контроль безопасности. |
После изменения политики рекомендуется проверить текущий уровень командой:
Get-ExecutionPolicy -Scope CurrentUser
Это гарантирует, что изменения применились корректно и не затронули другие пользователи или глобальные настройки системы.
Разрешение выполнения скриптов для всех пользователей системы
Чтобы разрешить выполнение PowerShell-скриптов для всех учетных записей, используется параметр -Scope LocalMachine командлета Set-ExecutionPolicy. Это изменение требует прав администратора и влияет на глобальные настройки системы.
Команды для установки различных уровней политики:
- Set-ExecutionPolicy RemoteSigned -Scope LocalMachine – позволяет запускать локальные скрипты без подписи, а скачанные требуют цифровую подпись.
- Set-ExecutionPolicy Unrestricted -Scope LocalMachine – разрешает выполнение всех скриптов с предупреждением при запуске загруженных из интернета.
- Set-ExecutionPolicy AllSigned -Scope LocalMachine – требует цифровую подпись для всех скриптов, обеспечивая максимальный контроль безопасности.
Перед изменением глобальной политики рекомендуется проверить текущие настройки командой:
Get-ExecutionPolicy -Scope LocalMachine
После применения нового уровня следует удостовериться, что изменения корректно вступили в силу и не нарушают работу критических системных процессов.
Использование командлетов Set-ExecutionPolicy и Get-ExecutionPolicy

Командлет Get-ExecutionPolicy позволяет определить текущий уровень политики выполнения скриптов. Для проверки всех контекстов используется параметр -List, который отображает настройки для Process, CurrentUser и LocalMachine.
Пример команды для получения полной информации:
Get-ExecutionPolicy -List
Командлет Set-ExecutionPolicy изменяет политику выполнения скриптов. Важно указывать -Scope, чтобы определить, на какой уровень распространяется изменение:
- Process – только текущий сеанс PowerShell.
- CurrentUser – только текущая учетная запись.
- LocalMachine – все пользователи системы, требуется администратор.
Пример команды для установки политики RemoteSigned для текущего пользователя:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Для безопасности рекомендуется после изменения проверять текущий уровень командой Get-ExecutionPolicy -Scope [Scope], чтобы убедиться, что настройки применились корректно и не затронули другие контексты.
Разблокировка отдельных скриптов через свойства файла
Windows автоматически блокирует файлы, скачанные из интернета, помечая их меткой Zone.Identifier. Это препятствует выполнению PowerShell-скриптов даже при разрешенной политике ExecutionPolicy.
Для разблокировки конкретного скрипта через свойства файла выполните следующие шаги:
- Щелкните правой кнопкой мыши по файлу скрипта и выберите Свойства.
- В разделе Общие найдите отметку Этот файл получен с другого компьютера и может быть заблокирован.
- Снимите флажок Разблокировать и нажмите Применить.
Альтернативно, можно использовать командлет PowerShell Unblock-File для автоматизации процесса:
Unblock-File -Path «C:\Путь\к\скрипту.ps1»
Эта операция снимает метку безопасности и позволяет запускать скрипт без изменения глобальной политики выполнения, ограничивая вмешательство только к выбранным файлам.
Запуск скриптов без изменения глобальной политики
Для выполнения отдельных скриптов без изменения глобальной политики ExecutionPolicy используется параметр -ExecutionPolicy Bypass при запуске PowerShell. Это позволяет временно игнорировать ограничения безопасности только для конкретного сеанса.
Пример команды запуска скрипта с обходом политики:
PowerShell -ExecutionPolicy Bypass -File «C:\Путь\к\скрипту.ps1»
Дополнительно можно использовать временный контекст процесса, чтобы изменения не сохранялись:
- -Scope Process – политика применяется только к текущему сеансу PowerShell.
- После закрытия окна PowerShell настройки возвращаются к глобальной политике.
Для запуска нескольких скриптов в обход политики удобно использовать командлет Start-Process с указанием аргумента -ExecutionPolicy Bypass:
- Откройте PowerShell с правами пользователя.
- Выполните команду: Start-Process powershell -ArgumentList ‘-ExecutionPolicy Bypass -File «C:\Путь\к\скрипту.ps1″‘.
- Скрипт запустится с обходом ограничений, не влияя на системные настройки.
Этот метод безопасен для однократного или тестового запуска скриптов без необходимости изменять глобальные параметры системы.
Проверка безопасности и ограничений при выполнении скриптов

Перед запуском скриптов важно оценить риски, связанные с их источником и содержимым. Файлы, загруженные из интернета, могут содержать вредоносный код, даже если политика ExecutionPolicy позволяет их выполнение.
Рекомендации для проверки безопасности:
- Использовать командлет Get-AuthenticodeSignature для проверки цифровой подписи скрипта. Подписанные скрипты показывают статус Valid или Unknown, что помогает оценить доверие к источнику.
- Проверять наличие метки блокировки Zone.Identifier с помощью команды Get-ItemProperty -Path «C:\Путь\к\скрипту.ps1» -Name Zone.Identifier. Если метка существует, файл был загружен из внешнего источника.
- Использовать Unblock-File только для проверенных скриптов.
Для ограничения запуска потенциально опасных скриптов можно применять уровень политики RemoteSigned или AllSigned, а для тестовых или одноразовых запусков использовать -ExecutionPolicy Bypass с ограничением области Process.
Регулярная проверка подписи и источника файлов позволяет поддерживать баланс между возможностью выполнения скриптов и безопасностью системы.
Вопрос-ответ:
Как проверить текущую политику выполнения скриптов в PowerShell?
Для проверки уровня политики используется командлет Get-ExecutionPolicy. Он возвращает один из уровней: Restricted, RemoteSigned, AllSigned, Unrestricted, Bypass или Undefined. Для отображения политики на всех уровнях используйте Get-ExecutionPolicy -List, что покажет настройки для Process, CurrentUser и LocalMachine.
Как разрешить выполнение скриптов только для своей учетной записи?
Чтобы изменить политику только для текущего пользователя, применяется командлет Set-ExecutionPolicy с параметром -Scope CurrentUser. Например, команда Set-ExecutionPolicy RemoteSigned -Scope CurrentUser позволит запускать локальные скрипты без подписи, а скачанные из интернета — только с цифровой подписью. После изменения рекомендуется проверить результат с помощью Get-ExecutionPolicy -Scope CurrentUser.
Можно ли запускать скрипты без изменения глобальной политики?
Да, для временного запуска используется параметр -ExecutionPolicy Bypass. Например, команда PowerShell -ExecutionPolicy Bypass -File «C:\Путь\к\скрипту.ps1» запускает скрипт, игнорируя текущие ограничения, но не изменяет настройки для других сеансов. Этот метод подходит для тестовых или одноразовых запусков.
Как разблокировать отдельный скрипт, скачанный из интернета?
Файлы, загруженные из интернета, получают метку безопасности Zone.Identifier, которая блокирует их выполнение. Разблокировать файл можно через свойства: правой кнопкой мыши → Свойства → снять флажок Разблокировать. В PowerShell можно использовать командлет Unblock-File -Path «C:\Путь\к\скрипту.ps1», чтобы снять блокировку программно.
Как проверить безопасность скриптов перед запуском?
Для проверки используется командлет Get-AuthenticodeSignature, который отображает статус подписи файла: Valid, Unknown или NotSigned. Файлы без подписи, особенно скачанные из интернета, рекомендуется запускать только после разблокировки и проверки кода. Также полезно проверять наличие метки Zone.Identifier через Get-ItemProperty.
