ExecutionPolicy в PowerShell

Содержание
Введение
Get-ExecutionPolicy
Set-ExecutionPolicy
Scope: политика для определённой области
Process: политика для текущей сессии
Bypass
Похожие статьи

Введение

Функция безопасности для управления условиями запуска скрипта.

Предотвращение выполнения вредоносных скриптов.

Ограничение выполнения скриптов определенными сеансами.

Политики выполнения для локального компьютера и текущего пользователя хранятся в реестре.

Политика выполнения не является системой безопасности, ограничивающей действия пользователя.

На компьютере с Windows можно установить политику выполнения для локального компьютера, текущего пользователя или конкретного сеанса.

На компьютерах с другими операционными системами политика выполнения по умолчанию — «Без ограничений», и ее нельзя изменить.

Применение политик происходит только на платформах Windows.

Существующие политики

All Signed Policy

Порядок проверки:

Process CurrentUser LocalMachine Restricted

Везде где будет запускаться PowerShell я использую полную команду powershell для совместимости со старыми Windows, например, Windows 7.

Если у вас относительно новая Windows, вы можете использовать алиас pwsh

Get-ExecutionPolicy

Пример получения текущей ExecutionPolicy

Get-ExecutionPolicy

Restricted

С помощью -List можно получить более подробный список.

PS C:\Users\Andrei> Get-ExecutionPolicy -List

Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine RemoteSigned

Рассмотрим файл Test.ps1 со следущим содержанием

Write-Host "Visit www.heihei.ru!" -f Green

.\Test.ps1

Visit www.heihei.ru!

Если теперь из режима администратора изменить политику запуска для LocalMachine на Restricted то скрипт не запустится.

Set-ExecutionPolicy Restricted
Get-ExecutionPolicy -List

Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine Restricted

.\Test.ps1

.\Test.ps1: File C:\demo\Test.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.

Если все политики установлены в режим Undefined по умолчанию выставляется Restricted

Get-ExecutionPolicy -List

Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine Undefined

.\Test.ps1

.\Test.ps1: File C:\demo\Test.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.

РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе

Конец рекламы. Если там пусто считайте это рекламой моей телеги

Set-ExecutionPolicy

Можно назначить область действия по умолчанию или конкретную область действия.

Область действия по умолчанию — LocalMachine, которая распространяется на всех пользователей компьютера.

Политики выполнения можно использовать для одного сеанса PowerShell.

Get-ExecutionPolicy

Restricted

Set-ExecutionPolicy Unrestricted

Get-ExecutionPolicy

Unrestricted

По-умолчанию задается политика для LocalMachine

Scope: политика для определённой области

Политику выполнения можно явно задать для определённой области

Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
Set-ExecutionPolicy AllSigned -Scope CurrentUser
Get-ExecutionPolicy -List

Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser AllSigned LocalMachine RemoteSigned

Если при такой политике попробовать выполнить скрипт Test.ps1 появится ошибки вызванная тем, что файл не подписан.

.\Test.ps1

.\Test.ps1: File C:\demo\Test.ps1 cannot be loaded. The file C:\demo\Test.ps1 is not digitally signed. You cannot run this script on the current system. For more information about running scripts and setting execution policy, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.

В такой ситуации нужно убрать ограничение с области CurrentUser

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

.\Test.ps1

Visit www.heihei.ru!

Задать ExecutionPolicy на удаленной машине

Invoke-Command ` -ComputerName Computer ` -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy

Process: политика для текущей сессии

Чтобы задать ExecutionPolicy только для текущей сессии нужно выполнить следующую команду

powershell -ExecutionPolicy RemoteSigned

Get-ExecutionPolicy

RemoteSigned

Теперь текущая политика это RemoteSigned, несмотря на то, что LocalMachine политика это Unrestricted а CurrentUser политика Undefined.

Это произошло потому, что запустив PowerShell с указанием политики, мы задали её в области Process

Get-ExecutionPolicy -List

Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process RemoteSigned CurrentUser Undefined LocalMachine Unrestricted

В этой ситуации, мы можем определить политику запуска как Restricted для CurrentUser и скрипт всё-равно выполнится.

Set-ExecutionPolicy -ExecutionPolicy Restriced -Scope CurrentUser
Get-ExecutionPolicy -List

Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process RemoteSigned CurrentUser Restricted LocalMachine Unrestricted

.\Test.ps1

Visit www.heihei.ru!

Bypass

Чтобы разрешить выполнение определённого скрипта без изменения общей политики нужно использовать команду Bypass

powershell.exe -ExecutionPolicy Bypass -File "Z:\pwsh\setup.ps1"

Вместо "Z:\pwsh\setup.ps1" укажите ваш скрипт

Автор статьи: Андрей Олегович

Похожие статьи
Windows
PowerShell
Alias
Запросы к REST API
Пользователи
Сеть
Установка
Файлы
Функции
Циклы
ExecutionPolicy
if
GetType()
param
Write-Host

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: