Вопрос по – Почему мои скрипты PowerShell не работают?

92

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

Он находится в каталоге сценариев на моем пути.

Cannot be loaded because the execution of scripts is disabled on this system. 
please see "get-help about-signing".

Я посмотрел на помощь, но она менее чем полезна.

Ваш Ответ

7   ответов
15

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

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

это +superuser.com/questions/612409/… + ссылка быстрого доступа = совершенство
5

.\ перед именем сценария. Например:

.\scriptname.ps1
71

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.
Error: User Rate Limit ExceededRestrictedError: User Rate Limit ExceededRead More
Error: User Rate Limit Exceeded
5
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

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

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

который (IIRC) будет запускать только подписанные сценарии.

Попробуйте набрать это:

set-executionpolicy remotesigned

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

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

Вы должны запустить Powershell с правами администратора, по крайней мере, под Windows 8!
Для одного выстрела, я нахожуAnkur's answer below это определяет временное исключение для работающего экземпляра PowerShell, наиболее полезное.
И вам также нужно запустить сценарий PowerShell с правами администратора в Windows 7.
This is a fairly terrifying answer. Для одного этоpermanently изменяет уровень безопасности Powershell по умолчанию, возможно, нежелательными (и небезопасными) способами. С другой стороны, он не может даже адекватно объяснить, что подписанные удаленные сценарии и неподписанные локальные сценарии & # x2013; ноnot неподписанные удаленные скрипты, которыеChocolatey иногда требуется & # x2013; будут предоставлены привилегии исполнения. Большинство пользователей, вероятно, хотятthis а такжеthis вместо.
Хотя беспокойство Сесила по поводу некоторых недостатков в ответе справедливо, я хотел бы отметить несколько вещей. 1) Его две ссылки открывают мне одну и ту же страницу. 2) Если вы хотите, чтобы сценарии выполнялись просто, настройка политики выполнения, вероятно, все еще будет подходить, и, возможно, не связана с OP: 3) кажется, что лучшая политика для сценариев запуска, укажите политику выполнения и область действия в командной строке. запустить скрипт и для входа в систему установить конфигурацию сеанса по мере необходимости. Если вы хотите обеспечить высокий уровень безопасности во время сеанса Windows, но не хотите входить в систему, вам нужно получить нюансы в порядке следования сценариев.
13

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

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

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

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

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

Это также приостанавливает окно в конце, чтобы я мог видеть вывод 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%
Есть ли какие-нибудь новости о предостережениях?
Это то, чтоchocolatey использует для загрузки и установки шоколада
1

set-executionpolicy unrestricted позволит любому скрипту, который вы создадите, запускаться как зарегистрированный пользователь. Просто убедитесь, что для параметра executepolicy задано значение подпись, используяset-executionpolicy signed  до выхода.

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

Похожие вопросы