Оскільки це питання продовжує залучати відповіді, які або спростовуються органом запитання, або не стосуються фактичної проблеми, прочитайте цей простий короткий зміст того, що вам потрібно знати:
- Це не "Чому моя інсталяція PowerShell за замовчуванням не запускає сценарії?" питання.
- Це не "Чому моя інсталяція PowerShell не запускає сценарії, завантажені з Інтернету?" питання.
- Питання в тому, чому
RemoteSigned
політика виконання перешкоджає виконанню сценарію, коли цього не слід.RemoteSigned
це єдина політика виконання, яку я хочу використовувати. Мені відомо, що доступні інші, менш обмежувальні правила. Якби ці політики були прийнятними замінниками, я б просто використовував їх замість цього, і цього питання не існувало б.- Для політики виконання вже встановлено значення
RemoteSigned
. Зміна його зRemoteSigned
наRemoteSigned
не є рішенням.- Файл сценарію створюється та зберігається локально.
- Файл сценарію не заблокований. Файл сценарію ніколи не блокувався (див. Попередній пункт).
- Файл сценарію не можна розблокувати, оскільки немає чого розблокувати (див. Попередній пункт).
- Файл сценарію виконується (намагався) виконати адміністратором.
Windows PowerShell
є єдиним залученим додатком. Ні,Windows PowerShell ISE
ніCommand Prompt
будь-які інші інструменти чи редактори не мають значення.- Причину проблеми вже встановлено (див. Прийняту відповідь). Після майже 8 років, я думаю, усі інші очевидні пояснення, незалежно від того, чи застосовуються вони, також були опубліковані. Якщо ви думаєте інакше, будь ласка, прочитайте питання та відповіді до них, перш ніж додавати свої.
Я використовую Windows PowerShell 2.0 на 64-розрядної версії Windows 7 Professional. У мене є сценарій, Desktop
який викликає таку помилку під час спроби його запустити:
File C:\Users\UserName\Desktop\Script.ps1 cannot be loaded. The file C:\Users\UserName\Desktop\Script.ps1 is not digitally signed. The script will not execute on the system. Please see "get-help about_signing" for more details..
At line:1 char:54
+ C:\Users\UserName\Desktop\TestGetWindowsUpdateLog.ps1 <<<<
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
Я одночасно і адміністратор домену, і локальний адміністратор, і якщо я запускаю Get-ExecutionPolicy -List
, я бачу, що Group Policy Object
створений мною для налаштування PowerShell правильно застосовує RemoteSigned
політику виконання на рівні машини:
Scope ExecutionPolicy
----- ---------------
MachinePolicy RemoteSigned
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
Я створив скрипт самостійно в Notepad
, і використовував Sysinternals " streams
корисність і файл Properties
діалогу , щоб підтвердити , що сценарій не розглядається як прийшовши з Інтернету. Якщо я скопіюю сценарій у мережевий ресурс на сервері домену, тоді це дозволено виконати. Якщо я запустив, Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
то локальний скрипт все ще не може виконуватися, що має сенс, оскільки політика виконання в MachinePolicy
області має перевагу.
Як задокументовано about_Execution_Policies
(на даний момент ; на момент запитання ), RemoteSigned
політика означає:
Можуть працювати сценарії.
Потрібен цифровий підпис від надійного видавця на сценаріях та конфігураційних файлах, які завантажуються з Інтернету (включаючи програми електронної пошти та програми обміну миттєвими повідомленнями).
Не вимагає цифрових підписів на сценаріях, які ви запускали та писали на локальному комп’ютері (не завантажували з Інтернету).
Ризики запуску непідписаних сценаріїв з інших джерел, крім Інтернету, та підписаних, але шкідливих сценаріїв.
Мій сценарій не підписаний, але оскільки він одночасно створюється та виконується локально, він повинен відповідати третьому пункту, наведеному вище. Тому ...
- Чому мій сценарій не можна запускати?
- Чому PowerShell скаржиться на те, що мій сценарій "не має цифрового підпису", коли ця вимога повинна стосуватися лише файлів з Інтернету?
- Чому PowerShell більше не турбується про те, що сценарій не підписаний, коли він запускається із спільної мережі?