无法通过PowerShell设置证书友好名称(访问被拒绝)

时间:2015-04-08 08:34:42

标签: windows powershell certificate powershell-v2.0

我正在尝试通过PowerShell更新(根)证书的友好名称。

我正在尝试更新的证书在下面的屏幕截图中突出显示(取自certmgr.msc):

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上运行)
  • 我正在运行PS的x64版本
  • DEP和UAC已停用
  • 我的帐户是管理员组的一部分
  • 我是一个完整的PowerShell n00b; - )

PS版输出:

$PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
2      0      -1     -1

1 个答案:

答案 0 :(得分:3)

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

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

您可以下载Powershell 4.0 here

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