2010-02-08 18:41:03 +0000 2010-02-08 18:41:03 +0000
305
305

Как включить выполнение скриптов PowerShell?

Когда я пытаюсь выполнить свой PowerShell скрипт, я получаю эту ошибку:

Файл C:\Common\Scripts\hello.ps1 не может быть загружен, потому что выполнение скриптов отключено на этой системе. Подробности см. в разделе “get-help about_signing”. В line:1 char:13 + .\hello.ps1 <<< + CategoryInfo : NotSpecified: (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException

Ответы (10)

451
451
451
2010-02-08 18:44:16 +0000
  1. Запустите Windows PowerShell с опцией “Запустить от имени администратора”. Только члены группы Administrators на компьютере могут изменять политику выполнения.

  2. Включите выполнение неподписанных сценариев, введя:

. Это позволит выполнять неподписанные сценарии, которые вы пишете на локальном компьютере, и подписанные сценарии из Интернета.

См. также Running Scripts в Microsoft TechNet Library.

91
91
91
2010-02-08 18:43:25 +0000

Политика выполнения по умолчанию ограничена, вы можете увидеть ее, набрав:

Get-ExecutionPolicy

Вы должны ввести следующее, чтобы перейти в неограниченный режим:

Set-ExecutionPolicy unrestricted

Надеюсь это помогает

66
66
66
2013-01-14 00:46:49 +0000

На моей машине, которую я использую для разработки сценариев, я буду использовать -неограниченный, как описано выше. Однако при установке своих сценариев на машину конечного пользователя я буду просто вызывать Powerhell с ключом -executionpolicy:

powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1
21
21
21
2016-09-07 07:06:18 +0000

Мы можем получить статус текущей политики исполнения по команде ниже:

Get-ExecutionPolicy;

По умолчанию это Restricted. Чтобы разрешить выполнение PowerShell Scripts, нам нужно установить эту политику выполнения либо как Bypass, либо как Unrestricted.

Мы можем установить политику для текущего пользователя как Bypass или Unrestricted с помощью любой из нижеприведенных команд PowerShell:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;

Unrestricted политика загружает все файлы конфигурации и запускает все скрипты. Если вы запускаете неподписанный сценарий, который был загружен из Интернета, вам будет предложено получить разрешение, прежде чем он будет запущен.

В то время как в политике Bypass, ничто не блокируется, и нет никаких предупреждений или подсказок во время выполнения сценария. Bypass ExecutionPolicy является более расслабленным, чем Unrestricted.

5
5
5
2016-01-21 10:01:36 +0000

В зависимости от версии и конфигурации Windows, даже в режиме Unrestricted у вас может быть следующее предупреждение:

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this
script can potentially harm your computer. If you trust this script, use the 
Unblock-File cmdlet to allow the script to run without this warning message. 
Do you want to run?
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D")

Решение заключается в использовании политики “обхода”, включенной с помощью следующей команды:

Set-ExecutionPolicy Bypass

Из документация :

Обход: Ничего не блокируется и нет предупреждений или подсказок.

Очевидно, что это небезопасно, пожалуйста, поймите связанные с этим риски.

3
3
3
2017-11-29 10:10:20 +0000

Ключ рег с: Редактор реестра Windows версии 5.00

[HKEY_LOCAL\MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell] “EnableScripts”=dword:00000001 “ExecutionPolicy”=“Обход”

и:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell]
"EnableScripts"=dword:00000001 "ExecutionPolicy"="Unrestricted"

действительно тоже работает.

1
1
1
2018-12-04 22:06:53 +0000

По каким-то причинам команда PowerShell не включила локальное выполнение глобально, только для локального пользовательского контекста. Если бы я попытался запустить Powershell скрипт, например, из bash prompt CygWin, который запускается в собственном пользовательском контексте, он бы не запустился, что дало бы ошибку “не имеет цифровой подписи”. Ответом будет переход в редактор локальной политики групп -> Политика локальных компьютеров -> Административные шаблоны -> Компоненты Windows -> Windows PowerShell и двойной щелчок мыши на ‘Включить выполнение сценария’. Затем позвольте мне изменить его на ‘Включить’, а затем применить политику выполнения “Разрешить локальные сценарии и сценарии с удаленной подписью” и заставить его работать глобально, независимо от контекста пользователя.

1
1
1
2019-04-24 14:47:15 +0000

Установка политики (правильно) является лучшим выбором, но на моих управляемых системах у меня нет возможности изменить эту политику.

*Для меня, самый простой обходной путь к изменению политики заключается в открытии сценария в “PowerShell ISE”, выделите код (или часть кода) для выполнения, а затем нажмите кнопку “Run Selection” кнопку (или используйте ярлык F8). *

Это не лучшее решение и мало что делает для автоматизации задач, но оно позволяет мне использовать и утилиту PowerShell, не нарушая при этом работу моего отдела ISE.

1
1
1
2018-12-15 01:09:31 +0000

Принятый ответ верен, но изменение политики доступно только для текущего экземпляра Powershell, то есть после того, как экземпляр Powershell будет закрыт. Политика будет сброшена. Если пользователь снова откроет другой экземпляр Powershell, политика по умолчанию будет применена в Restricted

. Мне нужно использовать консоль VisualStudio Code и g++ из cygwin для сборки. Консоль использует Powershell, с политикой по умолчанию ничего нельзя сделать. Одним из решений является изменение политики при каждом запуске консоли в VisualStudio Code, может быть, сценарий изменения политики.

мне лень, поэтому другое решение - когда я запускаю Powershell в режиме администрирования, аналогично тому, как это делается в принятом ответе. но с дополнительным параметром, который изменяет значения в таблице реестра. Как только это будет сделано. Другие экземпляры Powershell будут использовать политику RemoteSigned по умолчанию.

set-executionpolicy remotesigned -Scope CurrentUser

-2
-2
-2
2018-04-05 13:49:49 +0000

Причина, по которой ключ reg работает, заключается в том, что он делает именно то, что делают команды PS. Команды записывают изменения в ключи reg. Команды гораздо быстрее и проще, чем создание ключа reg или копание в реестре.