Почему мои сценарии PowerShell не работают?


104

Я написал простой командный файл в виде сценария PowerShell, и при его запуске возникают ошибки.

Он находится в каталоге сценариев на моем пути. Это ошибка, которую я получаю:

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

Я заглянул в справку, но она мне не помогла.

Ответы:


102

Это может быть уровень безопасности PowerShell по умолчанию, который (IIRC) будет запускать только подписанные сценарии.

Попробуйте ввести это:

set-executionpolicy remotesigned

Это укажет PowerShell разрешить выполнение локальных (то есть на локальном диске) неподписанных сценариев.

Затем попробуйте снова выполнить свой сценарий.


5
Вы должны запустить Powershell с правами администратора, по крайней мере, под Windows 8!
ComFreek

1
И вы также должны запустить сценарий PowerShell с правами администратора под Windows 7.
Род

14
Это довольно устрашающий ответ. Во-первых, он навсегда изменяет уровень безопасности Powershell по умолчанию, возможно, нежелательными (и небезопасными) способами. Во-вторых, он не может даже адекватно объяснить, что подписанные удаленные сценарии и неподписанные локальные сценарии - но не неподписанные удаленные сценарии, которые иногда требует Шоколадки, - получат привилегии выполнения. Большинство пользователей, вероятно, захотят это и это вместо этого.
Сесил Карри,

1
Хотя беспокойство Сесила по поводу некоторых слабых мест в ответе справедливо, я хотел указать на несколько вещей. 1) Две его ссылки открывают для меня одну и ту же страницу. 2) Если вы хотите, чтобы сценарии просто запускались, установка политики выполнения, вероятно, по-прежнему является подходящим вариантом и, возможно, не связана с OP: 3) кажется, что лучшая политика - для сценариев запуска, укажите политику выполнения и область действия в командной строке запустив сценарий, и для входа в систему установите необходимую конфигурацию сеанса. Если вам нужен высокий уровень безопасности во время сеанса Windows, но ограниченный для входа в систему, вам нужно уточнить порядок выполнения сценариев.
omJohn8372 01

Для однократных попыток я считаю наиболее полезным ответ Анкура ниже , определяющий временное исключение для работающего экземпляра PowerShell.
Florenz Kley

79

Вам нужно запустить Set-ExecutionPolicy:

Set-ExecutionPolicy Restricted <-- Will not allow any powershell scripts to run.  Only individual commands may be run.

Set-ExecutionPolicy AllSigned <-- Will allow signed powershell scripts to run.

Set-ExecutionPolicy RemoteSigned <-- Allows unsigned local script and signed remote powershell scripts to run.

Set-ExecutionPolicy Unrestricted <-- Will allow unsigned powershell scripts to run.  Warns before running downloaded scripts.

Set-ExecutionPolicy Bypass <-- Nothing is blocked and there are no warnings or prompts.

3
Какое значение ExecutionPolicy по умолчанию, которое Windows устанавливает для новой установки?
Мэтью Лок

5
@MatthewLock Restricted- это политика по умолчанию. Подробнее
Nadeem_MK

24

Использование:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

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


this + superuser.com/questions/612409/… + сокращенная ссылка = совершенство
Q20

16

Мне удалось обойти эту ошибку, вызвав PowerShell следующим образом:

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

То есть я добавил -executionpolicy bypassк способу вызова сценария.

Это работало с пакетом обновления 1 для Windows 7. Я новичок в PowerShell, поэтому могут быть оговорки, о которых я не знаю.

[Edit 2017-06-26] Я продолжал без проблем использовать этот метод в других системах, включая Windows 10 и Windows 2012 R2.

Вот что я сейчас использую. Это предохраняет меня от случайного запуска скрипта, щелкнув по нему. Когда я запускаю его в планировщике, я добавляю один аргумент: «планировщик», и это обходит приглашение.

Это также приостанавливает окно в конце, чтобы я мог видеть вывод PowerShell.

if NOT "%1" == "scheduler" (
   @echo looks like you started the script by clicking on it.
   @echo press space to continue or control C to exit.
   pause
)

C:
cd \Scripts

powershell -executionpolicy bypass -File .\rundps.ps1

set psexitcode=%errorlevel%

if NOT "%1" == "scheduler" (
   @echo Powershell finished.  Press space to exit.
   pause
)

exit /b %psexitcode%

Это то, что шоколадный использует для загрузки и установки шоколадного
icc97

Я попытался запустить команду Set-ExecutionPolicy bypass -File C: \ Users \ david \ Desktop \ test.ps1 и получил сообщение об ошибке. Для этой команды нет опции -File.
Дэвид Спектор

О, я вижу. Вы должны создать ярлык, содержащий команду powershell -executionpolicy bypass -File C: \ Users \ david \ Desktop \ test.ps1. Затем команда test.ps1 запускается, даже если задана безопасная глобальная команда Set-ExecutionPolicy Restricted. Надеюсь, эта основная информация кому-то поможет.
Дэвид Спектор

5
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

Вышеупомянутая команда работала для меня, даже когда произошла следующая ошибка:

Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.

5

Также стоит знать, что вам может потребоваться включить .\перед именем скрипта. Например:

.\scriptname.ps1

1

Эта команда set-executionpolicy unrestrictedпозволит запускать любой созданный вами сценарий от имени вошедшего в систему пользователя. Просто не забудьте установить для параметра «Executionpolicy» значение «подписано» с помощью set-executionpolicy signedкоманды до выхода из системы.


set-executionpolicy signedдает Cannot bind parameter 'ExecutionPolicy'и т. д.
JinSnow

0

В Windows 10: щелкните изменить свойство безопасности myfile.ps1 и измените «разрешить доступ», щелкнув правой кнопкой мыши / свойства на myfile.ps1.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.