Я написал простой пакетный файл как сценарий 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 разрешить запуск локальных (то есть на локальном диске) неподписанных сценариев.
Затем попробуйте выполнить свой сценарий снова.
Вы должны управлять 'Набором-ExecutionPolicy':
<! - язык: lang-ни-один - >
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 обход к способу, которым я призвал сценарий.
Это работало над 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%
Также стоит знать, что перед именем скрипта может потребоваться включить .\
. Например:
.\scriptname.ps1
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
Вышеупомянутая команда работала на меня, даже когда следующая ошибка происходит:
Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.
Команда set-executionpolicy unrestricted
позволит любому созданному вами сценарию выполняться от имени вошедшего пользователя. Только не забудьте перед выходом из системы вернуть параметр политики исполнения в значение signed с помощью команды set-executionpolicy signed
.
На Windows 10: Щелкните по собственности безопасности изменения myfile.ps1 и измените " позвольте access" щелчком правой кнопкой мыши / свойства на myfile.ps1