Я использую Windows PowerShell 2.0 на 64-разрядной версии Windows 7 Профессиональная.У меня на рабочем столе есть сценарий, который вызывает следующую ошибку при попытке запустить его:
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
, я можно увидеть, что Объект групповой политики
, который я создал для настройки 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 жалуется, что мой сценарий «не имеет цифровой подписи», хотя это требование должно применяться только к файлам из Интернета? И почему его больше не волнует, что скрипт не подписан при запуске из сетевой папки?