2008-08-14 2 views
83

Я написал простой командный файл как скрипт powershell, и я получаю ошибки при запуске.Почему мои сценарии powershell не работают?

Это в каталоге сценариев на моем пути.

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

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

+3

вот почему командные файлы живут на! – 2017-05-17 06:35:19

ответ

91

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

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

set-executionpolicy remotesigned 

Это покажет PowerShell для локального (то есть, на локальном диске) неподписанные скрипты для запуска.

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

+5

Вы должны запустить Powershell с правами администратора, по крайней мере, под Windows 8! – ComFreek 2012-08-24 11:48:04

+1

И вы должны запустить скрипт PowerShell с правами администратора в Windows 7. – Rod 2014-02-28 20:26:42

+7

** Это довольно страшный ответ. ** Во-первых, он _permanently_ изменяет уровень безопасности Powershell по умолчанию, возможно, нежелательным (и небезопасным) способом. Во-вторых, он не может даже адекватно объяснить, что подписанные удаленные сценарии и неподписанные локальные скрипты, но не заданные неподписанные удаленные сценарии, которые иногда требуют [Chocolatey] (https://chocolatey.org) - будут предоставлены права выполнения. Большинство пользователей, вероятно, хотят [this] (https://stackoverflow.com/a/19974975/2809027) и [this] (https://stackoverflow.com/a/16141428/2809027). – 2016-06-07 06:30:40

5

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

.\scriptname.ps1 
1

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

+0

`set-executionpolicy signed` дает` Невозможно связать параметр 'ExecutionPolicy`` и т. Д. – JinSnow 2017-02-16 18:22:01

11
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process 

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

52

вам нужно запустить 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. 

Надеется, что это помогает!

4
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process 

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

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

я смог обойти эту ошибку, вызывая PowerShell, как это:

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1 

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

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

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

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

Это также останавливает окно в конце, поэтому я могу видеть вывод 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%