Почему мои скрипты PowerShell не работают?
Я написал простой командный файл в виде скрипта PowerShell и получаю ошибки при их запуске.
Это в каталоге скриптов в моем пути. Это ошибка, которую я получаю:
Не может быть загружен, потому что выполнение сценариев отключено в этой системе. Пожалуйста, смотрите "Получить справку о подписи".
Я посмотрел в помощь, но это менее чем полезно.
Ответы
Ответ 1
Это может быть уровень безопасности PowerShell по умолчанию, который (IIRC) будет запускать только подписанные сценарии.
Попробуйте ввести это:
set-executionpolicy remotesigned
Это скажет PowerShell разрешить запуск локальных (то есть на локальном диске) неподписанных сценариев.
Затем попробуйте снова выполнить ваш скрипт.
Ответ 2
Вам нужно запустить 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.
Ответ 3
Использование:
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
Всегда используйте приведенную выше команду, чтобы включить выполнение PowerShell в текущем сеансе.
Ответ 4
Мне удалось обойти эту ошибку, вызвав PowerShell следующим образом:
powershell -executionpolicy bypass -File .\MYSCRIPT.ps1
То есть я добавил -executionpolicy bypass
к тому, как я вызывал скрипт.
Это работало в Windows 7 с пакетом обновления 1 (SP1). Я новичок в PowerShell, поэтому могут быть оговорки, которые я не знаю.
[Edit 2017-06-26] Я продолжал использовать эту технику в других системах, включая 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%
Ответ 5
Также стоит знать, что вам может потребоваться включить .\
перед именем script. Например:
.\scriptname.ps1
Ответ 6
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
Приведенная выше команда работала для меня, даже если произошла следующая ошибка:
Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.
Ответ 7
Команда set-executionpolicy unrestricted
позволит любому script, который вы создаете для запуска, как зарегистрированный пользователь. Просто не забудьте установить для параметра executepolicy значение, подписанное с помощью команды set-executionpolicy signed
до выхода из системы.
Ответ 8
В Windows 10:
Нажмите изменить свойство безопасности myfile.ps1 и измените "разрешить доступ", щелкнув правой кнопкой мыши/свойства myfile.ps1