【问题标题】:Unable to set certificate friendly name through PowerShell (access is denied)无法通过 PowerShell 设置证书友好名称(访问被拒绝)
【发布时间】: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


【解决方案1】:

您需要将您的 Powershell 版本更新为 3.0 或 4.0。 见Get-ChildItem for Certificate

我有 Powershell 4.0,我能够毫无问题地更改 FriendlyName。这在重新启动后在 certmgr.msc 中可见。

您可以下载Powershell 4.0 here。

如果您是 Powershell 初学者,最好使用 Get-ChildItem 而不是 gci 以提高可读性。此外,cd 是 Set-Location 的别名,因此最好在脚本中选择其中一个以避免混淆。

【讨论】:

    猜你喜欢
    • 2010-11-27
    • 2018-09-12
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 2017-09-15
    • 2018-02-05
    • 2013-09-09
    • 1970-01-01
    相关资源
    最近更新 更多