Когда я пытаюсь выполнить свой сценарий PowerShell, я получаю эту ошибку:
Файл C: \ Common \ Scripts \ hello.ps1 не может быть загружен, потому что выполнение сценариев отключено в этой системе. Пожалуйста, смотрите "get-help about_signing" для более подробной информации.
В строке: 1 символ: 13
+. \ Hello.ps1 <<<<
+ CategoryInfo: NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId: RuntimeException
powershell
Павел Чучува
источник
источник
Ответы:
Запустите Windows PowerShell с параметром «Запуск от имени администратора». Только члены группы «Администраторы» на компьютере могут изменять политику выполнения.
Включите запуск неподписанных скриптов, введя:
Это позволит запускать неподписанные сценарии, которые вы пишете на локальном компьютере, и подписанные сценарии из Интернета.
Смотрите также Запуск сценариев в библиотеке Microsoft TechNet.
источник
hello.ps1
из OP или Microsoft.PowerShell_profile.ps1 на ящик пользователя? (Я думаю, что это, возможно, подпадает под общепризнанный OP-вопрос (ха, который я теперь вижу, тоже ваш!). Если вы чувствуете, что это новый вопрос, я могу его задать.)Политика выполнения по умолчанию ограничена, вы можете увидеть ее, набрав:
Вы должны ввести следующее, чтобы перейти в неограниченный режим:
Надеюсь это поможет
источник
RemoteSigned
не блокирует копирование и вставку, не блокирует git или другие методы загрузки, отличные от IE, тогда для чего это нужно? Скажи это со мной: «абсолютно ничего!». Я думаю, что требовать подписи сценариев с сертификатом подписи кода за 100 долларов - это бесполезно, глупо и сводит на нет все то хорошее, что может сделать приличный язык сценариев для Windows. При этом, если путь вперед состоит в том, чтобы заставить пользователей понять, что они делают, чтобы использовать сценарии PS, то мы можем быть слишком заняты ... Нееее, это никогда не сработает ;-)На моей машине, которую я использую для разработки сценариев, я буду использовать -unresricted, как указано выше. Однако при развертывании моих сценариев на компьютере конечного пользователя я просто вызову powershell с ключом -executionpolicy:
источник
Мы можем получить статус текущего ExecutionPolicy с помощью команды ниже:
По умолчанию это ограничено . Чтобы разрешить выполнение сценариев PowerShell, нам нужно установить для ExecutionPolicy значение Bypass или Unrestricted .
Мы можем установить политику для текущего пользователя как
Bypass
илиUnrestricted
с помощью любой из следующих команд PowerShell:Неограниченная политика загружает все файлы конфигурации и запускает все сценарии. Если вы запускаете неподписанный скрипт, который был загружен из Интернета, вам будет предложено разрешение перед его запуском.
Принимая во внимание, что в политике обхода ничего не блокируется, и нет никаких предупреждений или подсказок во время выполнения скрипта. Обход ExecutionPolicy более расслаблен, чем неограничен.
источник
В зависимости от версии и конфигурации Windows вы можете получить следующее предупреждение, даже в
Unrestricted
режиме:Решение состоит в том, чтобы использовать политику обхода, активированную с помощью следующей команды:
Из документации :
Это явно небезопасно, пожалуйста, поймите риски.
источник
Рег ключ с:
Windows Registry Editor версии 5.00
а также:
действительно работает тоже.
источник
По какой-то причине командлет PowerShell не разрешил локальное выполнение глобально, только для локального пользовательского контекста. Если бы я попытался запустить скрипт Powershell из командной строки CygWin, например, который запускается в своем собственном пользовательском контексте, он не запустился бы с сообщением об ошибке «Цифровая подпись отсутствует». Ответ заключался в том, чтобы перейти в редактор локальной групповой политики -> Политика локального компьютера -> Административные шаблоны -> Компоненты Windows -> Windows PowerShell и дважды щелкнуть «Включить выполнение сценария». Это затем позволило мне изменить его на «Включено», а затем политику выполнения «Разрешить локальные сценарии и удаленные подписанные сценарии» и заставить его работать глобально, независимо от контекста пользователя.
источник
Принятый ответ правильный, но изменение политики доступно только для текущего запущенного экземпляра Powershell, то есть после закрытия экземпляра Powershell. Политика будет сброшена. Если пользователь повторно открывает другой экземпляр Powershell, будет применена политика по умолчанию, которая
Restricted
Для меня мне нужно использовать консоль VisualStudio Code и g ++ из cygwin для сборки вещей. Консоль использует Powershell, с политикой по умолчанию ничего нельзя сделать. Одним из решений является изменение политики каждый раз, когда консоль запускается в консоли кода VisualStudio, возможно, это скрипт изменения политики.
Я ленив, поэтому другое решение - когда я запускаю Powershell в режиме администратора, аналогично тому, что делает принятый ответ. но с дополнительным параметром, который изменяет значения в таблице реестра. Как только это было сделано. Другие экземпляры Powershell будут использовать
RemoteSigned
политику по умолчанию.set-executionpolicy remotesigned -Scope CurrentUser
источник
Установка политики (правильно) - лучший выбор, но в моих управляемых системах у меня нет возможности изменить эту политику.
Для меня самый простой обходной путь к изменению политики состоит в том, чтобы открыть сценарий в «PowerShell ISE» , выделить код (или часть кода) для выполнения и затем нажать кнопку «Выполнить выбор» (или использовать клавишу F8). ярлык).
Это не лучшее решение и мало что дает для автоматизации задач, но оно позволяет мне использовать и использовать PowerShell, хотя и не работает в стороне от моего отдела информационных технологий.
источник
Причина, по которой работает ключ reg, заключается в том, что он делает именно то, что делают команды PS. Команды записывают изменения в ключи reg. Команды намного быстрее и проще, чем создание ключа reg или копание в реестре.
источник