it-roy-ru.com

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

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

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

Я запустил set-executionpolicy unrestricted, и когда я запускаю get-executionpolicy из PowerShell, я получаю unrestricted обратно.

// Вывод из Powershell

PS C:\Users\Администратор> get-executepolicy

Неограниченный

// Вывод из DOS

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Портал управления\Install\Scr

ipts> powershell.\Management_Install.ps1 1

ВНИМАНИЕ: Запуск 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

    • CategoryInfo: NotSpecified: (:) [], PSSecurityException

    • FullyQualifiedErrorId: RuntimeException

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Портал управления\Install\Scripts> pause

Нажмите любую клавишу для продолжения . , ,.

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

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

1396
Conor

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

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

Set-ExecutionPolicy RemoteSigned

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

1836
Chad Miller

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

powershell -ExecutionPolicy ByPass -File script.ps1
592
Jack Edmonds

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

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

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 бита

114
Ralph Willgoss

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

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

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

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

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

Чтобы проверить текущую политику выполнения, вы можете запустить 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 не найдет ничего, что он не сможет выполнить.

103
KyleMit

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

set-executionpolicy unrestricted
34
manik sikka

В Windows 7:

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

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

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

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

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

34
Ryan

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

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

или же

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

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

Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full
29
Micah 'Powershell Ninja'

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

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

Set-ExecutionPolicy RemoteSigned
23
Jaime

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

Get-ExecutionPolicy;

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

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

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

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

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

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

19
Pratik Patil

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

[64]

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

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

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

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

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

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

18
hugocabral

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

9
ScriptAholic

Win + R и введите команду копировать вставить и нажмите OK:

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

И выполнить свой сценарий.

Затем отменить изменения, такие как:

powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"
8
Qamar

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

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

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

15 способов обойти политику выполнения PowerShell

7
Alexander Sinno
  1. Откройте PowerShell от имени администратора и запустите Set-ExecutionPolicy -Scope CurrentUser
  2. Укажите RemoteSigned и нажмите Enter
  3. Выполнить Set-ExecutionPolicy -Scope CurrentUser
  4. Предоставьте Неограниченно и нажмите Enter
5
Ramanujam Allam

В редакторе PowerShell ISE я обнаружил, что в следующей строке запускаются первые разрешенные сценарии.

Set-ExecutionPolicy RemoteSigned -Scope Process
2
David Douglas

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

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

В вашем случае введите Set-ExecutionPolicy RemoteSigned из консоли PowerShell и скажите «да».

1
Adil Arif

Перейдите к пути реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell и установите для ExecutionPolicy значение RemoteSigned.

1
sunish surendran.k

Я обнаружил, что эта линия лучше всего работает для одного из моих серверов Windows Server 2008 R2. У пары других не было проблем без этой строки в моих скриптах PowerShell:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process
0
WIlliamT

Откройте окно PowerShell как Администратор . Это будет работать.

0
Suganthan Raj

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

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

от Джек Эдмондс выше, и Питер Мортенсен/Дхана пост Как запустить приложение как «запуск от имени администратора» из командной строки?

0
Kirt Carson

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

Вот как можно изменить только 32-битную политику:

Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted}
0
rko281

Если вы находитесь здесь из-за того, что запускаете его с Ruby или Chef и используете `` системное выполнение, выполните следующее:

`powershell.exe -ExecutionPolicy Unrestricted -command [Environment]::GetFolderPath(\'mydocuments\')`

Эта команда предназначена для получения папки «MyDocuments».

-ExecutionPolicy Unrestricted делает свое дело.

Я надеюсь, что это полезно для кого-то еще.

0
JGutierrezC