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 中运行