Почему мои сценарии PowerShell не запускаются?

StackOverflow https://stackoverflow.com/questions/10635

  •  08-06-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

Это может быть уровень безопасности 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

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

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

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

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

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

[Изменить 26 июня 2017 г.] Я продолжал без проблем использовать эту технику в других системах, включая 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%
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

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

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

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

.\scriptname.ps1

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top