it-swarm-ru.tech

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

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

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

232
Pavel Chuchuva
  1. Запустите Windows PowerShell с параметром «Запуск от имени администратора». Только члены группы «Администраторы» на компьютере могут изменять политику выполнения.

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

    set-executionpolicy remotesigned
    

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

Смотрите также Запуск сценариев в библиотеке Microsoft TechNet.

353
Pavel Chuchuva

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

Get-ExecutionPolicy

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

Set-ExecutionPolicy unrestricted

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

68
William Hilsum

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

powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1
59
MDMoore313

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

Get-ExecutionPolicy;

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

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

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

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

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

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

14
Pratik Patil

В зависимости от версии и конфигурации 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

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

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

Это явно небезопасно, пожалуйста, поймите риски.

4
Benoit Blanchon

Рег ключ с:
Редактор реестра 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"

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

2
Giesbert Schipper

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

1
Eric Green

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

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

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

set-executionpolicy remotesigned -Scope CurrentUser

0
r0ng