PowerShell 访问被拒绝 cert:\CurrentUser\My

PowerShell 访问被拒绝 cert:\CurrentUser\My
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: 我跑了文件管理器登记监控查看我被拒绝访问的内容。 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
     .....  

答案1

听起来你有权限问题。

这是该电脑上的管理员帐户吗?您是否受到域控制?是否启用了组策略?

我猜这台电脑被锁定的程度超过了 PowerShell 的预期。有些管理员根本不允许它运行,因为它可能会造成一些损害。

运行时 Set-ExecutionPolicy RemoteSigned 出现任何错误吗?

答案2

PowerShell 通过 .NET Framework 运行。我有一段时间没用过 XP 了,但如果我没记错的话,用户列表中有一些奇怪的 .NET 用户。我一直没弄清楚那是干什么用的,但也许你需要授予该用户对相关目录的 NTFS 权限。

答案3

我发现了为什么会发生这种情况。如果我只是从菜单运行 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 资源管理器或 DOS 窗口成功列出内容。

有效的方法是,当我右键单击 PowerShell 并选择“以身份运行”时,将其保留在当前用户上,然后取消选中“保护我的计算机和数据免受未经授权的程序活动的侵害”。 之后,我可以列出我的主目录,并且可以访问签署代码所需的证书。

我的 DEP 设置呈灰色,这意味着它们是由组策略推动的,或者我需要提升为管理员才能更改它。我以管理员身份登录,发现 DEP 仅对基本 Windows 程序和服务启用。我猜 PowerShell 属于这一类。现在我可以访问证书,但我发现找不到私钥。我认为可以通过重新颁发证书来解决这个问题。

答案4

尝试Set-ExecutionPolicy Unrestricted在 powershell 中运行

相关内容