PowerShell говорит "выполнение сценариев отключено в этой системе"

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

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

Я запустил

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

и когда я запускаю Get-ExecutionPolicy из [tag:powershell], я получаю 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 char:25

  • `.\Management_Install.ps1 <<<< 1
  • CategoryInfo : NotSpecified: (:) [], PSSecurityException
  • FullyQualifiedErrorId : RuntimeException
C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\> PAUSE

Press any key to continue . . .

Система представляет собой Windows Server 2008R2.

Что я делаю неправильно?

Комментарии к вопросу (3)
Решение

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

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

Set-ExecutionPolicy RemoteSigned

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

Комментарии (6)

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

powershell -ExecutionPolicy ByPass -File script.ps1
Комментарии (5)

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

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

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

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

Вы можете проверить режим с помощью

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

References:
MSDN - Windows PowerShell execution policies
Windows - 32bit vs 64bit directory explanation

Комментарии (0)

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

С сайта TechNet страница о политиках выполнения:

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

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

  • контроль исполнения - контроль уровня доверия для выполнения скриптов.
  • руководить командой - предотвратить внедрение команд на моем пути.
  • личность - это сценарий, созданный и подписанный разработчиком, я верю, и/или подписан с помощью сертификата из центра сертификации, которому я доверяю.
  • целостность - Скрипты не могут быть изменены вредоносными программами или злоумышленниками.

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

Чтобы сделать это, вы'МР запустите установку параметра ExecutionPolicy в `` командлета.

Вы'll имеет два основных решения при обновлении политики выполнения.

# Исполнение Тип Политика#:

  • "Ограниченных" <суп>†</суп> - не скрипт локальный, удаленный или загружены могут быть выполнены в системе.
  • AllSigned - все сценарии, которые бегали требует цифровую подпись.
  • Значение RemoteSigned - все удаленные скрипты (UNC) или загружены должны быть подписаны.
  • "Свободный" - нет подписи для любого типа скрипта не требуется.

Объем новых изменений

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

<суп>† = по умолчанию</SUP и ГТ;

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

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

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

доступ к ключу реестра 'раздел HKEY_LOCAL_MACHINE\программное обеспечение\Майкрософт\PowerShell с\1\ShellIds\Майкрософт.В PowerShell' отказано. Для изменения политики исполнения по умолчанию (значение LocalMachine) объем, запустите Windows PowerShell с помощью "Запуск от имени администратора и" вариант.

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

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

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

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

Вы можете найти точное место, выполнив переменной PowerShell

$profile

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

Комментарии (3)

В Windows 7:

Перейти к меню Пуск и поиск и"в Windows PowerShell с Исэ-то".

Щелкните правой кнопкой мыши на версии x86 и выбрать "и запуск от имени администратора" по.

В верхней части, вставить набор-параметра ExecutionPolicy RemoteSigned с`; запустите скрипт. Выберите "Да и".

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

Я'м просто уточнение шагов, которые @Чад Миллер намекнул. Благодаря Чад!

Комментарии (0)

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

set-executionpolicy unrestricted
Комментарии (3)

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

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

или

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

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

Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full
Комментарии (3)

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

Get-ExecutionPolicy;

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

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

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

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

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

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

Комментарии (2)

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

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

Set-ExecutionPolicy RemoteSigned
Комментарии (1)

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

[х64]

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

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

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

Поэтому я нашел другой способ (решение):

  1. Откройте командную выполнить/консоль (<и>победа</роз> + <и>Р</роз>)
  2. Тип: команду gpedit.МСЦ (групповой политики редактор)
  3. Обзор политика "локальный компьютер" - > Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> оболочка.
  4. Включите и"включить выполнение скриптови"
  5. Задайте политики по мере необходимости. Я установить мину, чтобы "разрешать все сценариии".

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

Комментарии (5)

Настройка политики выполнения определенной среде. Если вы пытаетесь выполнить скрипт из версии x86 Исэ Вы должны использовать х86 PowerShell, чтобы задать политику выполнения. Аналогичным образом, если запущена 64-разрядная Исе вы должны установить политику с 64-разрядной оболочки PowerShell.

Комментарии (0)

<и>победа</роз> + <и>Р</КБД> и типа копировать вставить команду и нажмите клавишу <и>ОК</роз>:

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

И выполнить свой скрипт.

Затем вносите изменения как:

powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"
Комментарии (0)

Вы также можете обойти это, используя следующую команду:

PS > powershell Get-Content .\test.ps1 | Invoke-Expression

Вы также можете прочитать в этой статье Скотт Сазерленд, который объясняет 15 разных способов обхода набор-параметра ExecutionPolicy в PowerShell `` если вы Don'т иметь права администратора:

15 способов обхода политики выполнения PowerShell

Комментарии (1)
  1. Откройте PowerShell от имени администратора и запустить комплект-параметра ExecutionPolicy -области currentUser
  2. Предоставить значение RemoteSigned и нажмите Enter
  3. Запуска Комплект-Параметра ExecutionPolicy -Области CurrentUser
  4. Предоставить свободно и нажмите Enter
Комментарии (0)

В PowerShell Исэ редактор я нашел сначала выполнить следующую строку допускается скрипты.

Set-ExecutionPolicy RemoteSigned -Scope Process
Комментарии (0)

У меня сегодня та же проблема. 64-разрядные политика выполнения не ограничивается, в то время как 32-разрядные был ограничен.

Здесь's, Как изменить только 32-разрядные политика удаленно:

Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted}
Комментарии (0)

Идите к пути реестра раздел HKEY_LOCAL_MACHINE\программное обеспечение\Майкрософт\PowerShell с\1\ShellIds\Майкрософт.В PowerShell "и установите значение" параметра ExecutionPolicy " на " значение RemoteSigned`.

Комментарии (1)

В PowerShell 2.0, политику выполнения был отключен по умолчанию.

С тех пор, команда PowerShell имеет много улучшений, и они уверены, что пользователи не будут ломать вещи много сценариев. Так, начиная с PowerShell 4.0, он включен по умолчанию.

В вашем случае, тип набора-параметра ExecutionPolicy RemoteSigned с` из консоли PowerShell и сказать "да".

Комментарии (0)

Некоторые ответы указывают на политику выполнения. Однако некоторые вещи требуют "и запуск от имени администратора" и также. Это безопаснее в том, что нет постоянного изменения политики выполнения, и может обойти ограничения администратора. Использовать с schedtask начать замес с:

    runas.exe /savecred /user:administrator powershell -ExecutionPolicy ByPass -File script.ps1

как Джек Эдмондс выше, и Питер Мортенсен / Дхана пост https://stackoverflow.com/questions/8249705/how-to-run-an-application-as-run-as-administrator-from-the-command-prompt

Комментарии (0)

Я нашел эту линию лучше для одного из моих сервер Windows 2008 сервера Р2. Пару других не было никаких проблем без этой линии в моем сценарии PowerShell:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process
Комментарии (0)