PowerShell говорит: «В этой системе отключено выполнение сценариев». - PullRequest
1489 голосов
/ 28 октября 2010

Я пытаюсь запустить файл , который вызывает скрипт из cmd.exe, и я получаю следующую ошибку:

Management_Install.ps1 не может быть загружен, так как в этой системе отключено выполнение сценариев.

Я пробежал

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

и когда я запускаю Get-ExecutionPolicy из , я получаю Unrestricted обратно.

PS C:\Users\Administrator\> Get-ExecutionPolicy
Unrestricted

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\> powershell .\Management_Install.ps1 1

WARNING: Running x86 PowerShell...

Файл C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\Management_Install.ps1 не может быть загружен, так как в этой системе отключено выполнение сценариев. Пожалуйста, смотрите "get-help about_signing" для более подробной информации.

В строке: 1 символ: 25

  • .\Management_Install.ps1 <<<< 1 </p>

    • CategoryInfo: Не указано: (:) [], PSSecurityException

    • FullyQualifiedErrorId: RuntimeException

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\> PAUSE

Press any key to continue . . .

Система Windows Server 2008R2.

Что я делаю не так?

Ответы [ 23 ]

1921 голосов
/ 28 октября 2010

Если вы используете Windows Server 2008 R2, то существует версия PowerShell x64 и x86 , в обеих из которых должны быть установлены политики выполнения. , Вы установили политику выполнения на обоих хостах?

Как Администратор вы можете установить политику выполнения, набрав ее в окне PowerShell:

Set-ExecutionPolicy RemoteSigned

Для получения дополнительной информации см. Использование командлета Set-ExecutionPolicy .

624 голосов
/ 07 февраля 2012

Вы можете обойти эту политику, добавив -ExecutionPolicy ByPass при запуске PowerShell

powershell -ExecutionPolicy ByPass -File script.ps1
119 голосов
/ 30 августа 2013

У меня была похожая проблема, и я заметил, что по умолчанию cmd на Windows Server 2012 работает под управлением x64.

Для Windows 7 , Windows 8 , Windows 10 , Windows Server 2008 R2 или Windows Server 2012 , выполните следующие команды как Администратор :

x86 (32 бита)Открыто C:\Windows\SysWOW64\cmd.exeЗапустите команду powershell Set-ExecutionPolicy RemoteSigned

x64 (64 бит)Открыто C:\Windows\system32\cmd.exeЗапустите команду powershell Set-ExecutionPolicy RemoteSigned

Вы можете проверить режим, используя

  • В CMD: echo %PROCESSOR_ARCHITECTURE%
  • В Powershell: [Environment]::Is64BitProcess

Ссылки MSDN - политики выполнения Windows PowerShell Windows - 32-битное или 64-битное объяснение каталога

109 голосов
/ 16 ноября 2014

Большинство существующих ответов объясняют Как , но очень немногие объясняют Почему . И прежде чем вы начнете выполнять код от незнакомцев в Интернете, особенно код, который отключает меры безопасности, вы должны точно понимать, что вы делаете. Итак, вот немного подробнее об этой проблеме.

Из TechNet О странице политик выполнения :

Политики выполнения Windows PowerShell позволяют определять условия, при которых Windows PowerShell загружает файлы конфигурации и запускает сценарии.

Преимущества, перечисленные в Основы PowerShell - политика выполнения и подпись кода , следующие:

  • Контроль выполнения - Контроль уровня доверия для выполнения сценариев.
  • Command Highjack - Запретить внедрение команд на моем пути.
  • Идентичность - это сценарий, созданный и подписанный разработчиком, которому я доверяю, и / или подписанный сертификатом от центра сертификации, которому я доверяю.
  • Целостность - Сценарии не могут быть изменены вредоносным ПО или злонамеренным пользователем.

Чтобы проверить текущую политику выполнения, вы можете запустить Get-ExecutionPolicy. Но вы, вероятно, здесь, потому что хотите изменить это.

Для этого вы выполните командлет Set-ExecutionPolicy.

При обновлении политики выполнения вам нужно будет принять два основных решения.

Тип политики выполнения:

  • Restricted - Сценарий, локальный, удаленный или загруженный, не может быть выполнен в системе.
  • AllSigned - Все выполняемые сценарии должны иметь цифровую подпись.
  • RemoteSigned - Все удаленные сценарии (UNC) или загруженные файлы должны быть подписаны.
  • Unrestricted - подпись для любого типа сценария не требуется.

Сфера нового изменения

  • LocalMachine - политика выполнения влияет на всех пользователей компьютера.
  • CurrentUser - политика выполнения влияет только на текущего пользователя.
  • Process - Политика выполнения влияет только на текущий процесс Windows PowerShell.

† = По умолчанию

Например, : если вы хотите изменить политику на RemoteSigned только для CurrentUser, вы должны выполнить следующую команду:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Примечание : чтобы изменить политику выполнения, вы должны запустить PowerShell As Adminstrator . Если вы находитесь в обычном режиме и пытаетесь изменить политику выполнения, вы получите следующую ошибку:

Доступ к разделу реестра 'HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell' запрещен. Чтобы изменить политику выполнения для области по умолчанию (LocalMachine), запустите Windows PowerShell с параметром «Запуск от имени администратора».

Если вы хотите ужесточить внутренние ограничения для своих собственных сценариев, которые не были загружены из Интернета (или, по крайней мере, не содержат метаданных UNC), вы можете принудить политику запускать только подписанные сценарии. Чтобы подписать свои собственные сценарии, вы можете следовать инструкциям в статье Скотта Хансельмана о Подписание сценариев PowerShell .

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

Файл обычно находится в:

%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1

Точное местоположение можно узнать, запустив переменную powershell

$profile

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

36 голосов
/ 04 декабря 2012

В Windows 7:

Перейдите в меню «Пуск» и найдите «Windows PowerShell ISE».

Щелкните правой кнопкой мыши версию x86 и выберите «Запуск от имени администратора».

В верхней части вставить Set-ExecutionPolicy RemoteSigned; запустить скрипт Выберите «Да».

Повторите эти шаги для 64-разрядной версии Powershell ISE (не для версии x86).

Я просто разъясняю шаги, на которые намекнул @Chad Miller. Спасибо Чад!

35 голосов
/ 27 марта 2012

Также выполнение этой команды до того, как скрипт также решит проблему:

set-executionpolicy unrestricted
30 голосов
/ 19 ноября 2013

Если вы находитесь в среде, где вы не являетесь администратором, вы можете установить Политику выполнения только для вас, и вам не потребуется администратор.

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

или

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"

Вы можете прочитать все об этом в справочной записи.

Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full
24 голосов
/ 20 июля 2011

RemoteSigned: все созданные вами сценарии будут запущены, и все сценарии, загруженные из Интернета, должны быть подписаны доверенным издателем.

ОК, измените политику, просто набрав:

Set-ExecutionPolicy RemoteSigned
22 голосов
/ 07 сентября 2016

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

Get-ExecutionPolicy;

По умолчанию это Ограничено . Чтобы разрешить выполнение сценариев PowerShell, нам нужно установить для этого параметра ExecutionPolicy значение Обход или Неограниченно .

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

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

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

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

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

18 голосов
/ 01 сентября 2015

Я использую Windows 10 и не смог выполнить какую-либо команду.Единственная команда, которая дала мне некоторые подсказки, была следующей:

[x64]

  1. Открыть C: \ Windows \ SysWOW64 \ cmd.exe [от имени администратора]
  2. Запустите команду> powershell Set-ExecutionPolicy Unrestricted

Но это не сработало.Это было ограничено.Вероятно, новые политики безопасности для Windows10.У меня была эта ошибка:

Set-ExecutionPolicy: Windows PowerShell успешно обновил вашу политику выполнения, но параметр переопределяется политикой, определенной в более конкретной области.Из-за переопределения ваша оболочка сохранит свою текущую эффективную политику выполнения: *

Итак, я нашел другой способ ( решение ):

  1. Open Run Command / Console ( Win + R )
  2. Тип: gpedit.msc ( Групповая политика Редактор)
  3. Обзор Политика локального компьютера -> Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Windows Powershell .
  4. Включить " Включить выполнение сценария "
  5. Установить необходимую политику.Я установил свой « Разрешить все сценарии ».

Теперь откройте PowerShell и наслаждайтесь;)

...