Powershell 远程删除 PKI 证书

Powershell 远程删除 PKI 证书

我最近重建了我的 PKI,我想删除颁发给我网络中的所有客户端计算机的证书。这听起来像是 Powershell 的工作!因此,我编写了这个脚本,由 GPO 分发,从 SysVol 运行,并在启动时在客户端计算机上触发:

set-location cert:\LocalMachine\My
$certname = $env:COMPUTERNAME + ".domain.com"
get-item * | %{
if($_.issuer -like "CN=IssuingCA*" -and $_.DnsNameList.unicode -like $certname) { remove-item .\$_.Thumbprint -Force }
}

从提升的命令提示符:

  • 运行时,脚本没有输出(只是一个新的终端行)。它没有返回任何错误,并且证书未被删除。
  • 当将参数-WhatIf添加到Remove-Item脚本中的命令时,再次没有错误并且证书不会被删除。
  • 当运行 Remove-Item .\CERTIFICATE-THUMBPRINT -Force 时,该证书被删除。

这是权限问题吗?有没有更聪明/更简单的方法可以做到这一点?

谢谢!

答案1

我的回答是针对您问题中的“有没有更聪明/更简单的方法来做这件事?”部分。此脚本成功为我删除了 go daddy 证书

$Path = 'Cert:\LocalMachine\AuthRoot\'
$CertList = @()

$CertList = Get-ChildItem -Path $Path | Where-Object {$_.Issuer -like "CN=GO*"}

foreach($Cert in $CertList){
    remove-item "$($Path)$($Cert.Thumbprint)" -Force -WhatIf
}

我添加了一个-WhatIf,这样这段代码就不会对“复制\粘贴\运行”的用户造成危险。现在,您需要调整$PathWhere-Object并添加$certname变量,但上面的模板应该可以帮到您。

答案2

虽然我没能用脚本解决这个问题,我能够找到一种“更聪明/更简单”的方法来实现我的目标

来自证书颁发机构:

  • 右键单击Certificate Templates并选择Manage
  • 右键单击要替换的证书模板并选择Reenroll All Certificate Holders

这将增加模板的版本号,并且自动注册的网络系统将删除旧证书并使用新证书进行注册。

虽然这需要自动注册我正在使用的特定模板,但发布的脚本的解决方案将是一个更好的答案。

相关内容