【发布时间】:2015-06-13 02:52:55
【问题描述】:
我正在尝试通过 PowerShell 更新(根)证书的友好名称。
我正在尝试更新的证书在下面的屏幕截图中突出显示(取自certmgr.msc):
这是 PowerShell 代码(主要取自 here):
Set-Location cert:
cd .\CurrentUser\Root
$cert = gci .\02FAF3E291435468607857694DF5E45B68851868
$cert.FriendlyName = "UserTrust CA"
(我已经使用 certmgr.msc 中的证书属性验证了指纹,以确保它是同一个证书)。
最后一行会导致如下错误:
Exception setting "FriendlyName": "Access is denied.
"
At line:1 char:7
+ $cert. <<<< FriendlyName = "UserTrust CA"
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException
到目前为止,我已经尝试了以下方法:
- 以管理员身份运行 PowerShell
- 使用以下命令更改执行策略:
Set-ExecutionPolicy Unrestricted
其他信息:
- PowerShell 版本为 2.0(在 Windows 7 Enterprise x64 上运行)
- 我运行的是 x64 版本的 PS
- DEP 和 UAC 已禁用
- 我的帐户是管理员组的一部分
- 我是一个完整的 PowerShell n00b ;-)
PS版输出:
$PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
2 0 -1 -1
【问题讨论】:
-
对我也不起作用,即使 certmgr 这样做没有任何问题。我尝试使用 PS 的显式读/写权限打开证书存储,但这也无济于事。我发现错误可能是由 CertSetCertificateContextProperty() API 返回的,这就是我所拥有的。
-
如果您可以在创建证书后轻松更改证书的属性,那将无法达到目的。您需要重新颁发证书或在内存中创建一个新证书。
-
@Colyn1337 我可以使用
certmgr.msc毫无问题地更改友好名称属性。所以我看不出这在 PowerShell 中应该有什么不同......
标签: windows powershell certificate powershell-2.0