Большинство существующих ответов объясняют Как , но очень немногие объясняют Почему . И прежде чем вы начнете выполнять код от незнакомцев в Интернете, особенно код, который отключает меры безопасности, вы должны точно понимать, что вы делаете. Итак, вот немного подробнее об этой проблеме.
Из TechNet О странице политик выполнения :
Политики выполнения Windows PowerShell позволяют определять условия, при которых Windows PowerShell загружает файлы конфигурации и запускает сценарии.
Преимущества, перечисленные в Основы PowerShell - политика выполнения и подпись кода , следующие:
- Контроль выполнения - Контроль уровня доверия для выполнения сценариев.
- Command Highjack - Запретить внедрение команд на моем пути.
- Идентичность - это сценарий, созданный и подписанный разработчиком, которому я доверяю, и / или подписанный сертификатом от центра сертификации, которому я доверяю.
- Целостность - Сценарии не могут быть изменены вредоносным ПО или злонамеренным пользователем.
Чтобы проверить текущую политику выполнения, вы можете запустить Get-ExecutionPolicy
. Но вы, вероятно, здесь, потому что хотите изменить это.
Для этого вы выполните командлет Set-ExecutionPolicy
.
При обновлении политики выполнения вам нужно будет принять два основных решения.
Тип политики выполнения:
Restricted
† - Сценарий, локальный, удаленный или загруженный, не может быть выполнен в системе.
AllSigned
- Все выполняемые сценарии должны иметь цифровую подпись.
RemoteSigned
- Все удаленные сценарии (UNC) или загруженные файлы должны быть подписаны.
Unrestricted
- подпись для любого типа сценария не требуется.
Сфера нового изменения
LocalMachine
† - политика выполнения влияет на всех пользователей компьютера.
CurrentUser
- политика выполнения влияет только на текущего пользователя.
Process
- Политика выполнения влияет только на текущий процесс Windows PowerShell.
† = По умолчанию
Например, : если вы хотите изменить политику на RemoteSigned только для CurrentUser, вы должны выполнить следующую команду:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Примечание : чтобы изменить политику выполнения, вы должны запустить PowerShell As Adminstrator .
Если вы находитесь в обычном режиме и пытаетесь изменить политику выполнения, вы получите следующую ошибку:
Доступ к разделу реестра 'HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell' запрещен. Чтобы изменить политику выполнения для области по умолчанию (LocalMachine), запустите Windows PowerShell с параметром «Запуск от имени администратора».
Если вы хотите ужесточить внутренние ограничения для своих собственных сценариев, которые не были загружены из Интернета (или, по крайней мере, не содержат метаданных UNC), вы можете принудить политику запускать только подписанные сценарии. Чтобы подписать свои собственные сценарии, вы можете следовать инструкциям в статье Скотта Хансельмана о Подписание сценариев PowerShell .
Примечание : большинство людей, вероятно, получат эту ошибку всякий раз, когда они открывают Powershell, потому что первое, что PS пытается сделать при запуске, - это запустить скрипт профиля пользователя, который настраивает вашу среду так, как вам нравится.
Файл обычно находится в:
%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
Точное местоположение можно узнать, запустив переменную powershell
$profile
Если в профиле нет ничего, что вас волнует, и вы не хотите суетиться со своими настройками безопасности, вы можете просто удалить его, и powershell не найдет ничего, что он не может выполнить.