about_Execution_Policies
Краткое описание
Описывает политики выполнения PowerShell и объясняет, как управлять ими.
Подробное описание
Политика выполнения PowerShell — это функция безопасности, управляющая условиями, при которых PowerShell загружает файлы конфигурации и запускает скрипты. Эта функция помогает предотвратить выполнение вредоносных скриптов.
На компьютере Windows можно задать политику выполнения для локального компьютера, текущего пользователя или для определенного сеанса. Можно также использовать параметр групповой политики, чтобы задать политики выполнения для компьютеров и пользователей.
Политики выполнения для локального компьютера и текущего пользователя хранятся в файлах конфигурации PowerShell. Вам не нужно задавать политики выполнения в профиле PowerShell. Политика выполнения для определенного сеанса хранится только в памяти и теряется при закрытии сеанса.
Политика выполнения не является системой безопасности, которая ограничивает действия пользователей. Например, пользователи могут легко bypass использовать политику, введя содержимое скрипта в командной строке, если они не могут запустить скрипт. Вместо этого политика выполнения помогает пользователям задавать основные правила и непреднамеренно нарушать их.
На default компьютерах, отличных от Windows, политика выполнения не Unrestricted может быть изменена. Командлет Set-ExecutionPolicy
доступен, но PowerShell отображает консольное сообщение, которое оно не поддерживает. Хотя Get-ExecutionPolicy
возвращается Unrestricted на платформах, отличных от Windows, поведение действительно соответствуетBypass, так как эти платформы не реализуют зоны Безопасность Windows.
Политики выполнения PowerShell
Применение этих политик происходит только на платформах Windows. Политики выполнения PowerShell приведены следующим образом:
AllSigned
- Скрипты могут выполняться.
- требует, чтобы все скрипты и файлы конфигурации, включая скрипты, подготовленные на локальном компьютере, были подписаны доверенным издателем.
- Запрашивает перед выполнением скриптов от издателей, которые вы еще не классифицировали как доверенные или ненадежные.
- Риски выполнения подписанных, но вредоносных сценариев.
Bypass
- ничего не блокируется, и никакие предупреждения и запросы не появляются.
- Эта политика выполнения предназначена для конфигураций, в которых скрипт PowerShell встроен в более крупное приложение или для конфигураций, в которых PowerShell является основой для программы, которая имеет собственную модель безопасности.
Default
- default Задает политику выполнения.
- Restricted для клиентов Windows.
- RemoteSigned для серверов Windows.
RemoteSigned
- default Политика выполнения для компьютеров Windows Server.
- Скрипты могут выполняться.
- Требуется цифровая подпись доверенного издателя на скриптах и файлах конфигурации, скачанных из Интернета, включая программы электронной почты и обмена мгновенными сообщениями.
- Не требуется цифровые подписи для сценариев, написанных на локальном компьютере и не скачанных из Интернета.
- Запускает скрипты, скачанные из Интернета и не подписанные, если скрипты разблокируются, например с помощью командлета
Unblock-File
. - Риски выполнения неподписанных скриптов из источников, отличных от Интернета, и подписанных скриптов, которые могут быть вредоносными.
Restricted
- default Политика выполнения для клиентских компьютеров Windows.
- Разрешает отдельные команды, но не разрешает скрипты.
- Запрещает выполнение всех файлов скриптов, включая форматирование и файлы конфигурации (), файлы скриптов модуля (
.ps1xml
.psm1
) и профили PowerShell (.ps1
).
Undefined
- В текущей scopeполитике выполнения не задано.
- Если политика выполнения во всех областях является Undefinedэффективной политикой Restricted выполнения для клиентов Windows и RemoteSigned для Windows Server.
Unrestricted
- default Политика выполнения для компьютеров, отличных от Windows, не может быть изменена.
- Неподписанные скрипты могут выполняться. Существует риск запуска вредоносных сценариев.
- Предупреждает пользователя перед выполнением скриптов и файлов конфигурации, которые не относятся к локальной зоне интрасети.
Примечание.
В системах, которые не отличают пути универсального именования (UNC) от путей к Интернету, скрипты, определяемые путем UNC, могут быть запрещены для выполнения с политикой выполнения RemoteSigned .
Политика выполнения scope
Политику выполнения можно задать только в определенной scope.
Допустимые значенияScope: MachinePolicyUserPolicy, ProcessCurrentUser и LocalMachine. LocalMachine — это default при настройке политики выполнения.
Значения Scope перечислены в порядке приоритета. Политика, которая имеет приоритет, действует в текущем сеансе, даже если более ограничительная политика была установлена на более низком уровне приоритета.
Дополнительные сведения см. в разделе Set-ExecutionPolicy.
MachinePolicy
Задает групповую политику для всех пользователей компьютера.
UserPolicy
Задает групповую политику для текущего пользователя компьютера.
Process
Влияет Processscope только на текущий сеанс PowerShell. Политика выполнения сохраняется в переменной
$env:PSExecutionPolicyPreference
среды, а не в файле конфигурации. При закрытии сеанса PowerShell переменная и значение удаляются.CurrentUser
Политика выполнения влияет только на текущего пользователя. Он хранится в файле конфигурации CurrentUser .
LocalMachine
Политика выполнения влияет на всех пользователей на текущем компьютере. Он хранится в файле конфигурации AllUsers .
Управление политикой выполнения с помощью PowerShell
Чтобы получить эффективную политику выполнения для текущего сеанса Get-ExecutionPolicy
PowerShell, используйте командлет.
Следующая команда получает эффективную политику выполнения:
Get-ExecutionPolicy
Чтобы получить все политики выполнения, влияющие на текущий сеанс, и отобразить их в порядке приоритета:
Get-ExecutionPolicy -List
Результат выглядит примерно так, как показано в следующем примере выходных данных:
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine AllSigned
В этом случае эффективная политика выполнения является RemoteSigned , так как политика выполнения для текущего пользователя имеет приоритет над набором политик выполнения для локального компьютера.
Чтобы получить набор политик выполнения для конкретного scopeобъекта, используйте Scope параметр Get-ExecutionPolicy
.
Например, следующая команда получает политику выполнения для CurrentUserscope:
Get-ExecutionPolicy -Scope CurrentUser
Изменение политики выполнения
Чтобы изменить политику выполнения PowerShell на компьютере Windows, используйте Set-ExecutionPolicy
командлет. Изменение действует немедленно. Вам не нужно перезапустить PowerShell.
Если задать политику выполнения для областей LocalMachine или CurrentUser, изменение сохраняется в файле конфигурации и остается эффективным, пока не измените его еще раз.
Если для политики выполнения задана политика Processscopeвыполнения, она не сохраняется в файле конфигурации. Политика выполнения сохраняется до закрытия текущих process и дочерних процессов.
Примечание.
В Windows Vista и более поздних версиях Windows выполните команды, изменяющие политику выполнения для локального компьютера, LocalMachinescope, запустите PowerShell с параметром "Запуск от имени администратора".
Чтобы изменить политику выполнения, выполните следующие действия.
Set-ExecutionPolicy -ExecutionPolicy <PolicyName>
Например:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Чтобы задать политику выполнения в определенной области scope:
Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>
Например:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Команда для изменения политики выполнения может завершиться успешно, но по-прежнему не измените эффективную политику выполнения.
Например, команда, которая задает политику выполнения для локального компьютера, может быть выполнена успешно, но переопределена политикой выполнения для текущего пользователя.
Удаление политики выполнения
Чтобы удалить политику выполнения для конкретного scopeобъекта, задайте для политики выполнения значение Undefined.
Например, чтобы удалить политику выполнения для всех пользователей локального компьютера:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine
Удаление политики выполнения для Scope:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Если в какой-либо scopeполитике выполнения не задана, то эффективная политика выполнения — Restrictedэто default для клиентов Windows.
Настройка другой политики для одного сеанса
Параметр ExecutionPolicy pwsh.exe
можно использовать для задания политики выполнения для нового сеанса PowerShell. Политика влияет только на текущие сеансы и дочерние сеансы.
Чтобы задать политику выполнения для нового сеанса, запустите PowerShell в командной строке, например cmd.exe
или из PowerShell, а затем используйте параметр ExecutionPolicy для pwsh.exe
задания политики выполнения.
Например:
pwsh.exe -ExecutionPolicy AllSigned
Заданная политика выполнения не хранится в файле конфигурации. Вместо этого он хранится в переменной $env:PSExecutionPolicyPreference
среды. Переменная удаляется при закрытии сеанса, в котором задана политика. Изменить политику нельзя, изменив значение переменной.
Во время сеанса политика выполнения, установленная для сеанса, имеет приоритет над политикой выполнения, установленной в файле конфигурации для локального компьютера или текущего пользователя. Однако он не имеет приоритета над политикой выполнения, заданной с помощью групповой политики.
Используйте групповую политику для управления политикой выполнения
Параметр групповой политики Включить выполнение сценариев можно использовать для управления политикой выполнения компьютеров в вашей организации. Параметр групповой политики переопределяет политики выполнения, заданные в PowerShell во всех областях.
Параметр политики Включить выполнение скриптов:
Если отключить параметр Включить выполнение скриптов, скрипты не будут выполняться. Это эквивалентно политике Restricted выполнения.
Если включить параметр Включить выполнение скриптов, вы можете выбрать политику выполнения. Параметры групповой политики эквивалентны следующим параметрам политики выполнения:
Групповая политика Политика выполнения Разрешить все скрипты Unrestricted Разрешить локальные и удаленные подписанные скрипты RemoteSigned Разрешить только подписанные скрипты AllSigned Если параметр Включить выполнение скриптов не настроен, он не будет применяться. Политика выполнения, заданная в PowerShell, применяется.
Файлы PowerShellExecutionPolicy.adm и PowerShellExecutionPolicy.admx добавляют политику Включить выполнение скриптов в узлы "Конфигурация компьютера" и "Конфигурация пользователя" в редакторе групповой политики в следующие каталоги.
Windows XP и Windows Server 2003:
Administrative Templates\Windows Components\Windows PowerShell
Windows Vista и более поздние версии Windows:
Administrative Templates\Classic Administrative Templates\Windows Components\Windows PowerShell
Политики, заданные в узле Конфигурация компьютера, имеют приоритет над политиками, заданными в узле Конфигурация пользователя.
Дополнительные сведения см. в разделе about_Group_Policy_Settings.
Приоритет политики выполнения
При определении эффективной политики выполнения для сеанса PowerShell оценивает политики выполнения в следующем порядке приоритета:
Group Policy: MachinePolicy
Group Policy: UserPolicy
Execution Policy: Process (or pwsh.exe -ExecutionPolicy)
Execution Policy: LocalMachine
Execution Policy: CurrentUser
Управление подписанными и неподписанными скриптами
В Windows такие программы, как Internet Explorer и Microsoft Edge, добавляют альтернативный поток данных в скачанные файлы. Этот файл помечает файл как "поступающий из Интернета". Если политика выполнения PowerShell является RemoteSigned, PowerShell не будет запускать неподписанные скрипты, скачанные из Интернета, в том числе программы электронной почты и обмена мгновенными сообщениями.
Вы можете подписать скрипт или выбрать для запуска неподписанный скрипт, не изменив политику выполнения.
Начиная с PowerShell 3.0, можно использовать параметр Stream командлета Get-Item
для обнаружения заблокированных файлов, так как они были скачаны из Интернета. Unblock-File
Используйте командлет, чтобы разблокировать скрипты, чтобы их можно было запустить в PowerShell.
Дополнительные сведения см. в разделе about_Signing, Get-Item и Unblock-File.
Примечание.
Другие методы скачивания файлов могут не пометить файлы как поступающие из зоны Интернета. Некоторыми примерами могут служить:
curl.exe
Invoke-RestMethod
Invoke-WebRequest
Политика выполнения в Windows Server Core и Windows Nano Server
Если PowerShell 6 выполняется в Windows Server Core или Windows Nano Server в определенных условиях, политики выполнения могут завершиться сбоем со следующей ошибкой:
AuthorizationManager check failed.
At line:1 char:1
+ C:\scriptpath\scriptname.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
PowerShell использует API в классической оболочке Windows (explorer.exe
) для проверки зоны файла скрипта. Оболочка Windows недоступна в Windows Server Core и Windows Nano Server.
Вы также можете получить эту ошибку в любой системе Windows, если оболочка рабочего стола Windows недоступна или не отвечает. Например, во время входа сценарий входа в Систему PowerShell может начать выполнение до готовности рабочего стола Windows, что приведет к сбою.
Использование политики ByPass выполнения или AllSigned не требует проверки зоны, которая избегает проблемы.
См. также
PowerShell