Я использую Windows PowerShell 2.0 на 64-битной Windows 7 Professional .У меня на рабочем столе есть скрипт, который вызывает следующую ошибку при попытке его запустить:
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
Я сам создал сценарий в Блокнот , ииспользовал утилиту Sysinternals ' streams и диалоговое окно файла Properties
, чтобы подтвердить, что сценарий не обрабатывается как поступивший из Интернета.Если я скопирую сценарий в общую сетевую папку на доменном сервере, он будет выполнен.Если я запускаю Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
, то локальный сценарий по-прежнему не может выполняться, что имеет смысл, поскольку политика выполнения в области действия MachinePolicy
будет иметь приоритет.
Как указано в about_Execution_Policies
, политика RemoteSigned
означает:
Могут выполняться сценарии.
Требуется цифровая подпись от надежного издателя для сценариев и конфигурациифайлы, которые загружаются из Интернета (включая программы электронной почты и обмена мгновенными сообщениями).
Не требует цифровых подписей на сценариях, которые вы запустили и которые вы написали на локальном компьютере(не загружается из Интернета).
Риск запуска неподписанных сценариев из источников, отличных от Интернета, и подписанных, но вредоносных сценариев.
Мой сценарий не подписан, но, поскольку он создается и выполняется локально, он должен соответствовать третьему пункту выше.Так почему же ему не разрешено бежать?Почему PowerShell жалуется, что мой сценарий «не имеет цифровой подписи», когда это требование должно применяться только к файлам из Интернета?И почему он больше не заботится о том, чтобы скрипт не был подписан при запуске из общей сетевой папки?