Чому мої сценарії PowerShell не запущені?


103

Я написав простий пакетний файл як сценарій PowerShell, і я отримую помилки під час запуску.

Це в каталозі сценаріїв на моєму шляху. Це помилка, яку я отримую:

Неможливо завантажити, оскільки виконання скриптів у цій системі вимкнено. Дивіться "Довідка про підписання".

Я звернувся по допомогу, але це менш ніж корисно.

Відповіді:


102

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

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

set-executionpolicy remotesigned

Це дозволить PowerShell дозволити запускати локальні (тобто на локальному диску) непідписані сценарії.

Потім спробуйте виконати свій сценарій ще раз.


5
Вам потрібно запустити Powershell з правами адміністратора, принаймні під Windows 8!
ComFreek

1
І вам слід запустити скрипт PowerShell з адміністративними привілеями під Windows 7.
Прут

14
Це досить жахлива відповідь. Для одного, він постійно змінює рівень безпеки за замовчуванням Powershell можливо небажаними (і небезпечними) способами. З іншого боку, він не в змозі навіть адекватно пояснити, що підписані віддалені сценарії та неподписані локальні сценарії - але не неподписані віддалені сценарії, яких Chocolatey періодично вимагає - отримають привілеї на виконання. Більшість користувачів, напевно, хочуть цього та цього .
Сесіль Карі

1
Хоча стурбованість Сесіля з приводу деяких слабких питань у відповіді справедлива, я хотів зазначити кілька речей. 1) Здається, що його два посилання відкривають одну й ту саму сторінку. 2) Якщо ви хочете, щоб сценарії просто запускалися, встановлення політики виконання, ймовірно, все ще є шляхом, і, можливо, не пов'язане з ОП: 3) здається, що найкраща політика полягає в сценаріях запуску, вкажіть політику виконання та сферу застосування в командному рядку запустивши скрипт, а для входу встановіть конфігурацію сеансу за потребою. Якщо ви хочете забезпечити високу безпеку під час сеансу Windows, але обмежена для входу, вам потрібно буде виконати нюанс в порядку замовлення сценарію.
omJohn8372

Для одного знімка нижче я вважаю відповідь Анкура, яка визначає тимчасовий виняток для запущеного екземпляра PowerShell як найбільш корисний.
Флоренц Клей

79

Вам потрібно запустити 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
Яке значення ExecutionPolicy за замовчуванням, на яке Windows встановлює нову інсталяцію?
Меттью Лок

5
@MatthewLock Restricted - це політика за замовчуванням. Детальніше
Nadeem_MK

24

Використання:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

Завжди використовуйте вищевказану команду, щоб увімкнути виконання PowerShell в поточному сеансі.


це + superuser.com/questions/612409/… + посилання на ярлик = досконалість
Q20,

16

Мені вдалося обійти цю помилку, посилаючись на PowerShell так:

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

Тобто я додав -executionpolicy bypass те, як я посилався на сценарій.

Це працювало на Windows 7 Service Pack 1. Я новачок у PowerShell, тож я можу зробити застереження щодо цього, про що я не знаю.

[Редагувати 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%

Це те, що шоколад використовує для завантаження та встановлення chocolatey
icc97

Я спробував запустити команду Set-ExecutionPolicy bypass -File C: \ Users \ david \ Desktop \ test.ps1 і отримав повідомлення про помилку. Для цієї команди немає опції -File.
Девід Спектор

О Я бачу. Ви повинні зробити ярлик, що містить команду powershell -executionpolicy bypass -File C: \ Users \ david \ Desktop \ test.ps1. Потім команда test.ps1 запускається навіть тоді, коли була задана безпечна глобальна команда Set-ExecutionPolicy Restricted. Я сподіваюся, що ця основна інформація комусь допомагає.
Девід Спектор

5
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

Наведена вище команда працювала для мене, навіть коли трапляється наступна помилка:

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

5

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

.\scriptname.ps1

1

Команда set-executionpolicy unrestrictedдозволить будь-якому створеному вами сценарію запускатись як зареєстрований користувач. Будьте впевнені, що поверніть параметр Execupolicy назад до підписаного за допомогою set-executionpolicy signedкоманди перед виходом із системи.


set-executionpolicy signedдає Cannot bind parameter 'ExecutionPolicy'тощо
JinSnow

0

У Windows 10: Клацніть змінити властивість безпеки myfile.ps1 та змінити "дозволити доступ" правою кнопкою миші / властивостями на myfile.ps1

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.