Когда я пытаюсь выполнить свой сценарий PowerShell, я получаю эту ошибку:
Файл C:\Common\Scripts\hello.ps1 не может быть загружен, потому что выполнение скриптов отключено в этой системе. Для получения дополнительной информации см. раздел "get-help about_signing".
В строке:1 char:13
- .\hello.ps1 <<<<<
- CategoryInfo : NotSpecified: (:) [], PSSecurityException
- FullyQualifiedErrorId : RuntimeException
Запустите Windows PowerShell с помощью опции "Запуск от имени администратора". Изменить политику выполнения могут только члены группы администраторов на компьютере.
Включите запуск неподписанных сценариев, введя:
set-executionpolicy remotesigned
Это позволит запускать неподписанные сценарии, которые вы пишете на своем локальном компьютере, и подписанные скрипты из Интернета.
См. также Выполнение сценариев в Microsoft TechNet Library.
Политика выполнения по умолчанию установлена на ограничение, вы можете увидеть это, набрав:
Get-ExecutionPolicy
Чтобы перевести ее в неограниченный режим, нужно набрать следующее:
Set-ExecutionPolicy unrestricted
Надеюсь, это поможет
На своей машине, которую я использую для разработки сценариев, я буду использовать -unrestricted, как указано выше. Однако при развертывании моих сценариев на машине конечного пользователя я просто вызову powershell с ключом -executionpolicy:
powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1
Мы можем получить статус текущего параметра ExecutionPolicy с помощью команды ниже:
Get-ExecutionPolicy;
По умолчанию это ограниченного. Чтобы разрешить выполнение скриптов PowerShell нужно установить этот параметра ExecutionPolicy либо как обойти или без ограничений.
Мы можем настроить политики для текущего пользователя как "обходная" или "свободный" с помощью любого из указанных ниже команду PowerShell:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;
Без ограничений политика загружает все конфигурационные файлы и запускает все скрипты. Если запустить неподписанный скрипт, который был загружен из интернета, выводится запрос на разрешение перед запуском.
В то время как в обойти политика, ничего не блокируется и нет никаких предупреждений или приглашений во время выполнения скрипта. Обход параметра ExecutionPolicy более спокойно, чем без ограничений.
В зависимости от версии и конфигурации Windows, вы можете иметь следующие предупреждения, даже в "свободный" режим:
предупреждение безопасности запускать только скрипты, которым Вы доверяете. А скрипты из интернета могут быть полезны, это сценарий может нанести вред вашему компьютеру. Если Вы доверяете этот сценарий, используйте разблокировать-файл командлет, чтобы разрешить выполнение сценария без этого предупреждения. вы хотите работать? [D] не выполнять [R] выполнить один раз [s] приостановить [?] Справка (по умолчанию является "Д" - а)
Решение заключается в использовании в "обход" и политики, включен с помощью следующей команды:
Set-ExecutionPolicy Bypass
От документация:
байпас: ничего не блокируется и нет никаких предупреждений или приглашений.
Это, очевидно, небезопасной, пожалуйста, понять возможные риски.
Ключ reg с: Редактор Реестра Windows Версии 5.00
[политики реестра HKEY_LOCAL_MACHINE\SOFTWARE\корпорация Майкрософт\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"
действительно тоже работает.
Почему командлет PowerShell не позволяют местным исполнения во всем мире, только на местный контекст пользователя. Если бы я попытался запустить скрипт PowerShell изнутри под Cygwin's в командной строке, например, который работает в рамках собственного контекста пользователя, он не будет работать, давая "не имеет цифровой подписи" и ошибка. Ответ был зайти в Редактор локальной групповой политики -> В политика "локальный компьютер" - и GT; Административные шаблоны -> Компоненты Windows -> в Windows PowerShell и дважды щелкните на 'включить выполнение скриптов'. Тогда это, позвольте мне изменить это 'включен' и тогда политики исполнения на "разрешить локальные скрипты и удаленные подписанные скрипты" и это работает во всем мире вне зависимости от контекста пользователя.
Принятый ответ правильный, но изменение политики доступен только для текущего экземпляра в PowerShell, и, как только экземпляр PowerShell-это закрыли. Политики будут сброшены. Если пользователь открывает другой экземпляр PowerShell, политики по умолчанию будут применены, который "ограниченных"
Для меня, мне нужно использовать консоль VisualStudio код и G++ из Cygwin, чтобы построить вещи. Консоль с помощью PowerShell, с политикой по умолчанию, ничего не поделаешь. Одним из решений является изменение политики каждый раз в консоли запускается в консоли VisualStudio код, может скрипт изменения политики.
Я ленивый, поэтому другим решением является, когда я запускаю PowerShell в режиме администратора, аналогично тому, что принято отвечать вовсе. но с дополнительным параметром, который изменяет значения в таблице реестра. Как только это было сделано. Другие экземпляры PowerShell будет использовать значение RemoteSigned политики по умолчанию.
набор-параметра ExecutionPolicy RemoteSigned с -области currentUser`
Настройка политики (правильно) - это самый лучший выбор, но на мой управляемые системы не имеют возможность изменять эту политику.
Для меня, самая простая работа-для смены политики, чтобы открыть скрипт в "в среде ISE и" выделите код (или часть кода), чтобы выполнить, а затем нажмите на "Выбор и" кнопку (или использовать клавишу F8, ярлык).
Это не самое лучшее решение & мало ли для автоматизации задач, но он позволяет мне использовать & полезности для PowerShell, а не обвинений в мой отдел.