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


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

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


181
2018-02-08 18:41


Источник




Ответы:


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

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

    set-executionpolicy remotesigned
    

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

Смотрите также Запуск скриптов в Microsoft TechNet Library.


269
2018-02-08 18:44



+1 для remotesigned вместо неограниченного. Вы можете запускать свои локальные скрипты, не подвергая себя опасности со всех сторон. - DarrellNorton
Спасибо - этот пост мне помог. Однако у меня все еще были проблемы, потому что я не запускал PowerShell «как администратор» под win8 - sergeantKK
Будет ли это менять политику на постоянной основе или я должен делать это каждый раз, когда я перезагружаю компьютер? - Ray
Есть ли способ включить выполнение конкретный скрипт powershell? Поэтому, возможно, я просто хочу разрешить hello.ps1 из OP или Microsoft.PowerShell_profile.ps1 в поле пользователя? (Я думаю, что это, возможно, подпадает под широко распространенный вопрос ОП (га, который я теперь вижу, тоже ваш!). Если вы считаете, что это новый вопрос, я могу спросить его.) - ruffin
@ruffin Не могли бы вы задать отдельный вопрос? Затем вы можете связать его здесь. - Pavel Chuchuva


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

Get-ExecutionPolicy

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

Set-ExecutionPolicy unrestricted

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


59
2018-02-08 18:43



-1. это ПУТЬ слишком открытая, чтобы просто выполнить. RemoteSigned лучше. - TomTom
Необходимое подписание имеет смысл, если вы ожидаете, что пользователь скопирует и вставляет вредоносные скрипты из Интернета. Если вы предполагаете, что пользователь не глуп, то «remotesigned» не добавляет никакой безопасности и затрудняет жизнь. - Guss


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

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

48
2018-01-14 00:46



Вы можете комбинировать этот трюк с трюком polyglot в файле .CMD. Видеть stackoverflow.com/a/8597794/5314 - Jay Bazuzi
Ницца! Я использую sfx, созданный winrar rarlabs.com - MDMoore313
Этот трюк позволил мне запустить скрипт powershell из Git Bash (MINGW32 bash) - Kamil Szot


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

Get-ExecutionPolicy;

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

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

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

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

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

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


6
2017-09-07 07:06





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



это был единственный способ заставить мой скрипт работать в среде WINE с powershell 2.0. Спасибо. - Wyatt8740


Ключ с ключом:
Редактор реестра 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
2017-11-29 10:10





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


-1
2018-04-05 13:49



Это просто неправильно: ключи, упомянутые в других ответах, меняют политику выполнения powershells, которая затем запускает скрипт powershell. - Patrick R.