Почему мои сценарии powershell не выполняются?



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



это в каталоге скриптов в моем пути.



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


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

610   7  

7 ответов:

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

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

set-executionpolicy remotesigned

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

затем повторите выполнение скрипта.

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

надеюсь, что это помогает!

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

всегда использовать выше cmd чтобы разрешить выполнение powershell в текущем сеансе.

я смог обойти эту ошибку, вызвав powershell следующим образом:

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

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

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

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

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

Это также приостанавливает окно в конце, чтобы я мог видеть вывод 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%
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

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

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

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

.\scriptname.ps1

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

Comments

    Ничего не найдено.