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

Я пытаюсь запустить файл , который вызывает скрипт из 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

    • 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.

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

Ответы

Ответ 1

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

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

Set-ExecutionPolicy RemoteSigned

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

Ответ 2

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

powershell -ExecutionPolicy ByPass -File script.ps1

Ответ 3

У меня была похожая проблема, и я заметил, что по умолчанию 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

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

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

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

Рекомендации:
MSDN - политики выполнения Windows PowerShell
Windows - объяснение каталога на 32 бита против 64 бита

Ответ 4

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

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

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

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

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

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

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

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

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

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

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

  • 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 при запуске, - это выполнить свой профиль пользователя script, который настраивает вашу среду, но вы нравится.

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

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

Вы можете найти точное местоположение, запустив переменную powershell

$profile

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

Ответ 5

В Windows 7:

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

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

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

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

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

Ответ 6

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

set-executionpolicy unrestricted

Ответ 7

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

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

или

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

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

Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full

Ответ 8

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

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

Set-ExecutionPolicy RemoteSigned

Ответ 9

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

Get-ExecutionPolicy;

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

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

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

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

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

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

Ответ 10

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

[64]

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

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

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

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

  • Откройте команду запуска/консоль (Win + R)
  • Тип: gpedit.msc (Редактор групповой политики)
  • Обзор политики локального компьютера → Конфигурация компьютера → Административные шаблоны → Компоненты Windows → Windows Powershell.
  • Включить Включить Script Выполнение "
  • Задайте политику по мере необходимости. Я установил для меня " Разрешить все сценарии".

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

Ответ 11

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

Ответ 12

Win + R, введите команду copy paste и нажмите OK:

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

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

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

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

Ответ 13

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

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

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

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

Ответ 14

  1. Откройте PowerShell от имени администратора и запустите Set-ExecutionPolicy -Scope CurrentUser
  2. Укажите RemoteSigned и нажмите Enter
  3. Запустите Set-ExecutionPolicy -Scope CurrentUser
  4. Предоставьте Unrestricted и нажмите Enter

Ответ 15

В редакторе PowerShell ISE я нашел следующие строки разрешенных сценариев:

Set-ExecutionPolicy RemoteSigned -Scope Process

Ответ 16

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

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

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

Ответ 17

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

Ответ 18

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

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

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

-ExecutionPolicy Unrestricted делает трюк.

Я надеюсь, что это поможет кому-то другому.

Ответ 19

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

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process

Ответ 20

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

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

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

Ответ 21

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

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

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

Ответ 22

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

Ответ 23

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