Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Краткое описание
Описывает политики выполнения PowerShell и объясняет, как управлять ими.
Длинное описание
Политика выполнения PowerShell — это функция безопасности, которая управляет условиями, в которых PowerShell загружает файлы конфигурации и запускает скрипты. Эта функция помогает предотвратить выполнение вредоносных скриптов.
На компьютере Windows можно задать политику выполнения для локального компьютера, текущего пользователя или для определенного сеанса. Можно также использовать параметр групповой политики для задания политик выполнения для компьютеров и пользователей.
Политики выполнения для локального компьютера и текущего пользователя хранятся в файлах конфигурации PowerShell. Вам не нужно задавать политики выполнения в профиле PowerShell. Политика выполнения для определенного сеанса хранится только в памяти и теряется при закрытии сеанса.
Политика выполнения не является системой безопасности, которая ограничивает действия пользователей. Например, пользователи могут легко обойти политику, введя содержимое скрипта в командной строке, если они не могут запустить скрипт. Вместо этого политика выполнения помогает пользователям задавать основные правила и предотвращает их непреднамеренное нарушение.
На компьютерах, отличных от Windows, политика выполнения по умолчанию Unrestricted и не может быть изменена. Командлет Set-ExecutionPolicy доступен, но PowerShell выводит сообщение на консоль, что он не поддерживается. Хотя Get-ExecutionPolicy возвращает Unrestricted на платформах, отличных от Windows, поведение действительно соответствует Bypass, так как эти платформы не реализуют зоны безопасности Windows.
Политики выполнения PowerShell
Применение этих политик происходит только на платформах Windows. Политики выполнения PowerShell приведены следующим образом:
AllSigned- Скрипты могут выполняться.
- Требуется, чтобы все скрипты и файлы конфигурации были подписаны доверенным издателем, включая скрипты, записываемые на локальном компьютере.
- Спрашивает подтверждение перед выполнением скриптов от издателей, которых вы еще не классифицировали как доверенных или ненадежных.
- Риски выполнения подписанных, но вредоносных сценариев.
Bypass- Ничего не блокируется, и предупреждения или запросы отсутствуют.
- Эта политика выполнения предназначена для конфигураций, в которых скрипт PowerShell встроен в более крупное приложение или для конфигураций, в которых PowerShell является основой для программы, которая имеет собственную модель безопасности.
Default- Задает политику выполнения по умолчанию.
- RemoteSigned для клиентов и серверов Windows.
RemoteSigned- Политика выполнения по умолчанию для компьютеров Windows.
- Скрипты могут выполняться.
- Требуется цифровая подпись доверенного издателя на скриптах и файлах конфигурации, скачанных из Интернета, включая программы электронной почты и обмена мгновенными сообщениями.
- Не требуется цифровые подписи для сценариев, написанных на локальном компьютере и не скачанных из Интернета.
- Выполняет скрипты, скачанные из Интернета и не подписанные, если скрипты разблокированы, например с помощью командлета
Unblock-File. - Риски выполнения неподписанных скриптов из источников, отличных от Интернета, и подписанных скриптов, которые могут быть вредоносными.
Restricted- Разрешает отдельные команды, но не разрешает скрипты.
- Запрещает выполнение всех файлов скриптов, включая форматирование и файлы конфигурации (
.ps1xml), файлы скриптов модуля (.psm1) и профили PowerShell (.ps1).
Undefined- В текущей области не задана политика выполнения.
- Если политика выполнения во всех областях — это Undefined, то эффективная политика выполнения будет Restricted для клиентов Windows и RemoteSigned для Windows Server.
Unrestricted- Политика выполнения по умолчанию для компьютеров, отличных от Windows, не может быть изменена.
- Неподписанные скрипты могут выполняться. Существует риск запуска вредоносных сценариев.
- Предупреждает пользователя перед выполнением скриптов и файлов конфигурации, которые не относятся к локальной зоне интрасети.
Заметка
В системах, которые не различают пути универсального именования (UNC) от интернет-путей, сценарии, определенные путем UNC, могут не выполняться при политике выполнения RemoteSigned.
Область политики выполнения
Политику выполнения можно задать только в определенной области.
Допустимые значения для Scope: MachinePolicy, UserPolicy, Process, CurrentUserи LocalMachine. LocalMachine используется по умолчанию при настройке политики выполнения.
Значения Scope перечислены в порядке приоритета. Политика, которая имеет приоритет, действует в текущем сеансе, даже если более ограничительная политика была установлена на более низком уровне приоритета.
Дополнительные сведения см. в разделе Set-ExecutionPolicy.
MachinePolicy
Установлено групповой политикой для всех пользователей компьютера.
Пользовательская политика
Задает групповую политику для текущего пользователя компьютера.
Process
Область Process влияет только на текущий сеанс PowerShell. Политика выполнения сохраняется в переменной среды
$Env:PSExecutionPolicyPreference, а не в файле конфигурации. При закрытии сеанса PowerShell переменная и значение удаляются.Текущий пользователь
Политика выполнения влияет только на текущего пользователя. Он хранится в файле конфигурации CurrentUser.
LocalMachine
Политика выполнения влияет на всех пользователей на текущем компьютере. Он хранится в файле конфигурации AllUsers.
Управление политикой выполнения с помощью PowerShell
Чтобы получить эффективную политику выполнения для текущего сеанса PowerShell, используйте командлет Get-ExecutionPolicy.
Следующая команда получает эффективную политику выполнения кода:
Get-ExecutionPolicy
Чтобы получить все политики выполнения, влияющие на текущий сеанс, и отобразить их в порядке приоритета:
Get-ExecutionPolicy -List
Результат выглядит примерно так, как показано в следующем примере выходных данных:
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine AllSigned
В этом случае эффективная политика выполнения RemoteSigned, так как политика выполнения для текущего пользователя имеет приоритет над набором политик выполнения для локального компьютера.
Чтобы получить набор политик выполнения для определенной области, используйте параметр ScopeGet-ExecutionPolicy.
Например, следующая команда получает политику выполнения для области CurrentUser:
Get-ExecutionPolicy -Scope CurrentUser
Изменение политики выполнения
Чтобы изменить политику выполнения PowerShell на компьютере Windows, используйте командлет Set-ExecutionPolicy. Изменение действует немедленно. Вам не нужно перезапустить PowerShell.
Если задать политику выполнения для областей LocalMachine или CurrentUser, изменение сохраняется в файле конфигурации и остается эффективным, пока не измените его еще раз.
Если задать политику выполнения для области Process, она не сохраняется в файле конфигурации. Политика выполнения сохраняется до тех пор, пока не будут закрыты текущий процесс и все дочерние процессы.
Заметка
В Windows Vista и более поздних версиях Windows, чтобы выполнить команды, изменяющие политику выполнения для локального компьютера в области LocalMachine, запустите PowerShell с опцией запуск от имени администратора.
Чтобы изменить политику выполнения, выполните следующие действия.
Set-ExecutionPolicy -ExecutionPolicy <PolicyName>
Например:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Чтобы задать политику выполнения в определенной области, выполните следующие действия.
Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>
Например:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Команда для изменения политики выполнения может завершиться успешно, но всё же не изменяет эффективную политику выполнения.
Например, команда, которая задает политику выполнения для локального компьютера, может быть выполнена успешно, но переопределена политикой выполнения для текущего пользователя.
Удалить политику выполнения
Чтобы удалить политику выполнения для определенной области, задайте для политики выполнения значение Undefined.
Например, чтобы удалить политику выполнения для всех пользователей локального компьютера:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine
Чтобы удалить политику выполнения для Scope:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Если политика исполнения не задана в какой-либо области, то эффективная политика исполнения - Restricted, которая является значением по умолчанию для клиентов Windows.
Настройка другой политики для одного сеанса
Вы можете использовать параметр ExecutionPolicypwsh.exe, чтобы задать политику выполнения для нового сеанса PowerShell. Политика влияет только на текущую сессию и дочерние сеансы.
Чтобы задать политику выполнения для нового сеанса, запустите PowerShell в командной строке, например, с cmd.exe или из PowerShell, а затем используйте параметр ExecutionPolicypwsh.exe для установки политики выполнения.
Например:
pwsh.exe -ExecutionPolicy AllSigned
Заданная политика выполнения не хранится в файле конфигурации.
Вместо этого он хранится в переменной среды $Env:PSExecutionPolicyPreference. Переменная удаляется при закрытии сеанса, в котором задана политика. Изменить политику нельзя, изменив значение переменной.
Во время сеанса политика выполнения, установленная для сеанса, имеет приоритет над политикой выполнения, установленной в файле конфигурации для локального компьютера или текущего пользователя. Однако он не имеет приоритета над политикой выполнения, заданной с помощью групповой политики.
Использование групповой политики для управления политикой выполнения
Вы можете использовать параметр групповой политики Включить выполнение сценариев для управления политикой выполнения скриптов на компьютерах в вашей организации. Параметр групповой политики переопределяет политики выполнения, заданные в PowerShell во всех областях.
Параметры политики включения выполнения скриптов следующие:
Если отключить параметр Выполнение скриптов, скрипты не выполняются. Это эквивалентно политике выполнения Restricted.
Если включить Включить выполнение скриптов, вы сможете выбрать политику выполнения. Параметры групповой политики эквивалентны следующим параметрам политики выполнения:
Групповая политика Политика выполнения Разрешить все скрипты Unrestricted Разрешить локальные скрипты и удаленные подписанные скрипты RemoteSigned Разрешить только подписанные скрипты AllSigned Если Включение выполнения скриптов не настроено, оно не действует. Политика выполнения, заданная в PowerShell, эффективна.
Файлы PowerShellExecutionPolicy.adm и PowerShellExecutionPolicy.admx добавляют политику Включить выполнение скрипта в узлы конфигурации компьютера и конфигурации пользователей в редакторе групповой политики в следующем пути:
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.exeInvoke-RestMethodInvoke-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