Большинство существующих ответов объясняют как , но очень немногие объясняют почему . И прежде чем вы начнете выполнять код от незнакомцев в Интернете, особенно код, который отключает меры безопасности, вы должны точно понимать, что вы делаете. Итак, вот немного подробнее по этой проблеме.
Со страницы 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 не найдет ничего, что он не сможет выполнить.