Поскольку на этот вопрос продолжают поступать ответы, которые либо опровергаются основной частью вопроса, либо не касаются реальной проблемы, прочтите это простое резюме того, что вам нужно знать:
- Это не вопрос «Почему моя установка 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 больше не заботится о том, чтобы скрипт не подписывался при запуске из общего сетевого ресурса?
Ответы:
Файл заблокирован? У меня была такая же проблема, и я смог ее решить, щелкнув правой кнопкой мыши файл .PS1, Свойства и выбрав Разблокировать.
источник
'Write-Host ''Hello, World!'';' > .\Test.ps1; .\Test.ps1;
я все равно получаю сообщение об ошибке, что сценарий не имеет цифровой подписи и не выполняется. Если я открываю диалоговое окно «Свойства» для вновь созданного файла, разблокировать нечего.ps1
файл, щелкните его правой кнопкой мыши, чтобы открыть контекстное меню, и выберитеProperties
, на первой вкладке в нижней части будет указано, что файл заблокирован, и вы можете установить флажок, чтобы разблокировать его.Что нужно проверить:
Можете ли вы перейти на неограниченный?
Установлена ли групповая политика?
Computer Configuration\Administrative Templates\Windows Components\Windows PowerShell
User Configuration\Administrative Templates\Windows Components\Windows PowerShell
Кроме того, как вы вызываете Script.ps1?
Это позволяет ему работать?
источник
Scope
параметраLocalMachine
, поэтомуSet-ExecutionPolicy Unrestricted
фактически такой же , какSet-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
я уже пробовал. Да,Turn on Script Execution
политика включена дляComputer Configuration
.PowerShell
открывается вC:\Users\UserName
, поэтому я просто бегаю.\Desktop\Script.ps1
по запросу. Использование абсолютного пути приводит к той же ошибке, что и вызов скрипта черезpowershell.exe
.gpupdate /force
? (После перезапуска PowerShell.exe)Unrestricted
в областиLocalMachine
видимости, но когда я начал писать сценарии, я хотел запускать их с других компьютеров, на которые яLocalMachine
вернулся,Undefined
и добавил текущую групповую политику для установкиRemoteSigned
вMachinePolicy
области. Это всего лишь одноразовый тестовый сценарий, и на самом деле нет ничего страшного в том, чтобы запустить его из сети, я просто хочу знать, почему он не работает локально. В конце концов, локально созданный сценарий должен быть разрешен для выполненияRemoteSigned
, верно? Я просто подумал, что что-то я упускаю или не понимаю.RemoteSigned
сохранениеWrite-Host hi
с помощью блокнота на рабочий стол должно работать нормально. Ваша конфигурация тоже выглядит нормально ... Мне кажется, что-то сломалось ... поэтому я предложил удалить групповую политику, чтобы посмотреть, поможет ли это.-executionpolicy bypass
временно обходили проблему с удаленной подписью ... и это позволяло нам обнаруживать и отлаживать другие проблемы (не связанные, которые требовали от нас обновления PowerShell).Я наконец отследил это до .NET Code Access Security . У меня есть некоторые внутренние двоичные модули, которые хранятся и выполняются из общего сетевого ресурса. Чтобы заставить .NET 2.0 / PowerShell 2.0 загружать их, я добавил в
Intranet
группу кода правило URL, чтобы доверять этому каталогу:PS> & "$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\caspol.exe" -machine -listgroups Microsoft (R) .NET Framework CasPol 2.0.50727.5420 Copyright (c) Microsoft Corporation. All rights reserved. Security is ON Execution checking is ON Policy change prompt is ON Level = Machine Code Groups: 1. All code: Nothing 1.1. Zone - MyComputer: FullTrust 1.1.1. StrongName - ...: FullTrust 1.1.2. StrongName - ...: FullTrust 1.2. Zone - Intranet: LocalIntranet 1.2.1. All code: Same site Web 1.2.2. All code: Same directory FileIO - 'Read, PathDiscovery' 1.2.3. Url - file://Server/Share/Directory/WindowsPowerShell/Modules/*: FullTrust 1.3. Zone - Internet: Internet 1.3.1. All code: Same site Web 1.4. Zone - Untrusted: Nothing 1.5. Zone - Trusted: Internet 1.5.1. All code: Same site Web
Обратите внимание, что, в зависимости от того, какие версии .NET установлены и от того, 32- или 64-разрядная Windows,
caspol.exe
могут существовать в следующих местах, каждое со своей собственной конфигурацией безопасности (security.config
):$Env:SystemRoot\Microsoft.NET\Framework\v2.0.50727\
$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\
$Env:SystemRoot\Microsoft.NET\Framework\v4.0.30319\
$Env:SystemRoot\Microsoft.NET\Framework64\v4.0.30319\
После удаления группы
1.2.3.
...PS> & "$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\caspol.exe" -machine -remgroup 1.2.3. Microsoft (R) .NET Framework CasPol 2.0.50727.9136 Copyright (c) Microsoft Corporation. All rights reserved. The operation you are performing will alter security policy. Are you sure you want to perform this operation? (yes/no) yes Removed code group from the Machine level. Success
... У меня осталась конфигурация CAS по умолчанию, и теперь локальные скрипты снова работают. Это было время , так как я возился с CAS, и я не знаю , почему мое правило , казалось бы вмешиваться в те предоставление
FullTrust
кMyComputer
, но так как CAS нежелателен из .NET 4.0 (на котором базируется PowerShell 3.0), I думаю, сейчас это спорный вопрос.источник
caspol.exe
, но после запускаcaspol.exe -machine -addgroup 1.2 -url file://Server/Share/Directory/WindowsPowerShell/Modules/* FullTrust
я пришел к тому же1.2.3.
правилу, что и в этом ответе. Я использовалfile://
URL-адрес для ссылки на каталог на общем ресурсе SMB, хотя я вижу в документации, что в одном из-addgroup
примеров используется путь UNC.При запуске файла PS1 для подключенного диска к Dropbox я обнаружил, что всегда получаю эту ошибку. При открытии свойств для PS1 «Разблокировать» нет.
Единственное, что у меня работает, это
powershell.exe -executionpolicy bypass -file. \ Script.ps1
источник
Bypass
политики выполнения было предложено более пяти лет назад и совсем недавно, всего пять месяцев назад . Пожалуйста, прочтите вопрос и существующие ответы, прежде чем отвечать.Если файл копируется из сетевого расположения, то есть с другого компьютера, Windows могла заблокировать этот файл. Щелкните файл правой кнопкой мыши, нажмите кнопку разблокировки и посмотрите, работает ли он.
источник
'Write-Host ''Hello, World!'';' > .\Test.ps1; .\Test.ps1;
то все равно получал ошибку, что скрипт не был подписан цифровой подписью и не был выполнен. Если я открывал диалоговое окно «Свойства» для вновь созданного файла, разблокировать было нечего.Это проблема IDE. Измените параметр в графическом интерфейсе PowerShell. Перейдите на вкладку Инструменты и выберите Параметры, а затем Параметры отладки . Затем установите флажок Отключить требование подписи скриптов . Выполнено.
источник
Что сработало для меня, так это щелкнуть правой кнопкой мыши файл .ps1 и выбрать свойства. Нажмите кнопку «РАЗБЛОКИРОВАТЬ». Отлично работает у меня после нескольких часов попыток изменить политику.
источник
Сделайте резервную копию файла script.bs1
Для меня сработало удаление файла script.bs1 и выполнение команды выполнения.
источник
Get-ExecutionPolicy -List
?Выберите командную строку терминала вместо оболочки Power. Это должно сработать.
источник
Когда вы запускаете сценарий PowerShell .ps1, вы можете получить сообщение «.ps1 не имеет цифровой подписи. Сценарий не будет выполняться в системе ». Чтобы исправить это, вы должны выполнить команду ниже, чтобы запустить Set-ExecutionPolicy и изменить параметр политики выполнения.
источник
Bypass
политику выполнения. В любом случае использование другой политики бесполезно и не решает фактическую проблему, если этоRemoteSigned
действительно необходимо. Наконец, сообщение об ошибке, на которое вы ссылаетесь, не совпадает с сообщением в вопросе.У меня была такая же проблема, и я исправил ее, изменив программу по умолчанию, чтобы открывать файлы .ps1 в PowerShell. Он был настроен на Блокнот .
источник
.ps1
файл, он откроется в Блокноте вместо выполнения сценария в PowerShell?Попробуйте запустить графический интерфейс Powershell от имени администратора
источник
I am both a domain administrator and a local administrator
. Запуск PowerShell с повышенными привилегиями не имеет значения, поскольку скрипту разрешено запускаться без повышенных прав при хранении в общей сетевой папке.Выполните ниже 2 команды в окне PowerShell
Set-ExecutionPolicy без ограничений
Разблокировать файл-Путь D: \ PowerShell \ Script.ps1
источник