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

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

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

Cannot be loaded because the execution of scripts is disabled on this system. Пожалуйста, обратитесь к "get-help about-signing".

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

Решение

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

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

set-executionpolicy remotesigned

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

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

Комментарии (6)

Вы должны управлять 'Набором-ExecutionPolicy':

<! - язык: lang-ни-один - >


Set-ExecutionPolicy Restricted 
Комментарии (2)

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

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

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

Комментарии (1)

Я смог обойти эту ошибку, призвав PowerShell как это:

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

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

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

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

Вот то, что я использую теперь. Это держит меня от случайного управления сценарием, нажимая на него. Когда я управляю им в планировщике, я добавляю один аргумент: " 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%
Комментарии (3)

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

.\scriptname.ps1
Комментарии (0)
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

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

Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.
Комментарии (0)

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

Комментарии (1)

На Windows 10: Щелкните по собственности безопасности изменения myfile.ps1 и измените " позвольте access" щелчком правой кнопкой мыши / свойства на myfile.ps1

Комментарии (0)