3
PS cert:\currentuser\my> dir  
Get-ChildItem : Access is denied.
At line:1 char:3
+ dir <<<<

У меня нет доступа к любому из моих сертификатов подписи кода для подписи скрипта PowerShell. Я могу открыть MMC, Сертификаты и увидеть, что мои сертификаты для подписи кода установлены и действительны на моем компьютере (Windows XP SP 3).

Другая странная вещь заключается в том, что я не могу получить доступ ни к одному из моих подключенных сетевых дисков из PowerShell, но я хорошо вижу их в проводнике Windows и в окне DOS.

Я удалил PowerShell, перезагрузил и переустановил PowerShell 1, но проблема все еще остается.

РЕДАКТИРОВАТЬ: Моя повседневная учетная запись на этом компьютере не является администратором, но у меня есть учетная запись администратора, которую я могу использовать для задач, которые требуют этого. Сертификат подписи кода присваивается моей повседневной учетной записи, и мне не нужно быть администратором, чтобы подписывать код. Я не уверен, как дать этой учетной записи права на хранилище сертификатов.

РЕДАКТИРОВАТЬ 2: Я запустил FileMon и RegMon, чтобы увидеть, что мне отказано в доступе. cert:CurrentUser\My - это папка C:\Documents and Settings\USERNAME\Application Data\Microsoft\SystemCertificates\My\Certificates . Он также отказал мне в доступе к C:\Documents and Settings\USERNAME\Local Settings\Temp . Я могу без проблем открыть Проводник и добраться до файлов в этих папках. Я временно предоставил Everyone полные права на эти папки и все еще получил сообщение об отказе в доступе из PowerShell.

Google мало что показал. Что я должен делать?

Сообщение из журнала событий Windows PowerShell:

Provider Health: Attempting to perform the GetChildItems operation on  
the 'Certificate' provider failed for path '\currentuser\my'. Access is denied.

Details: 
ProviderName=Certificate
ExceptionClass=ProviderInvocationException
ErrorCategory=InvalidOperation
ErrorId=GetChildrenProviderException
ErrorMessage=Attempting to perform the GetChildItems operation on  
       the 'Certificate' provider failed for path '\currentuser\my'.  
       Access is denied.

Severity=Warning
SequenceNumber=146

HostName=ConsoleHost
HostVersion=1.0.0.0
     .....  

4 ответа4

3

Похоже, у вас есть проблемы с разрешениями.

Является ли это учетной записью администратора на этом ПК, подпадают ли вы под контроль домена и включены ли групповые политики?

Я предполагаю, что этот компьютер заблокирован больше, чем хотелось бы PowerShell. Некоторые администраторы вообще не разрешают ему работать, так как возможно нанести некоторый урон.

При запуске Set-ExecutionPolicy RemoteSigned вы получаете какие-либо ошибки?

2

PowerShell работает через .NET Framework. Некоторое время я не использовал XP, но, если я правильно помню, в списке пользователей есть какой-то странный пользователь .NET. Я никогда не удосужился выяснить, для чего это нужно, но, возможно, вам нужно предоставить этому пользователю права NTFS на соответствующий каталог.

1

Я обнаружил, почему это происходит. Если я просто запускаю PowerShell из меню, у меня возникают проблемы с доступом к сертификатам и другим ресурсам. Например, если я просто запустил его и перешел в свой домашний каталог и запустил "dir", я получил бы это:

PS C:\Documents and Settings\username> dir
Get-ChildItem : Access to the path 'C:\Documents and Settings\username' is denied.
At line:1 char:3
+ dir <<<<
PS C:\Documents and Settings\username>

Тем не менее, я могу использовать Windows Explorer или окно DOS, чтобы успешно отобразить содержимое.

Что работает, когда я щелкаю правой кнопкой мыши PowerShell и выбираю «Запуск от имени», оставляю его текущему пользователю и снимаю флажок «Защитить мой компьютер и данные от несанкционированной активности программы». После этого я могу указать свой домашний каталог и получить доступ к сертификату, который мне нужен для подписи кода.

Мои настройки DEP отображаются серым цветом, что означает, что они выдвигаются групповой политикой, или мне нужно перейти в администратор, чтобы изменить их. Я вошел в систему как администратор и обнаружил, что DEP включен только для основных программ и служб Windows. Я думаю, PowerShell попадает в эту категорию. Теперь, когда я могу получить доступ к сертификату, я обнаружил, что закрытый ключ не может быть найден. Я думаю, что это можно исправить, переиздав сертификат.

0

Попробуйте запустить Set-ExecutionPolicy Unrestricted в powershell

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .