ExecutionPolicy в PowerShell
| Введение | |
| Get-ExecutionPolicy | |
| Set-ExecutionPolicy | |
| Scope: политика для определённой области | |
| Process: политика для текущей сессии | |
| Bypass | |
| Похожие статьи |
Введение
Функция безопасности для управления условиями запуска скрипта.
Предотвращение выполнения вредоносных скриптов.
Ограничение выполнения скриптов определенными сеансами.
Политики выполнения для локального компьютера и текущего пользователя хранятся в реестре.
Политика выполнения не является системой безопасности, ограничивающей действия пользователя.
На компьютере с Windows можно установить политику выполнения для локального компьютера, текущего пользователя или конкретного сеанса.
На компьютерах с другими операционными системами политика выполнения по умолчанию — «Без ограничений», и ее нельзя изменить.
Применение политик происходит только на платформах Windows.
Существующие политики
- All Signed
- Bypass
- Remote Signed
- Restricted
- Unrestricted
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 |