Powershell远程删除PKI证书


9

我最近重新构建了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 }
}

在提升的命令提示符下:

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

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

谢谢!


1
你尝试了remove-item -whatif吗?
MDMoore313 2014年

@BigHomie。是的,我尝试过。我似乎已在编辑中删除了该信息...
拜伦·C

1
write-host如果条件为true ,则在您的条件代码块中添加a 在屏幕上转储某些内容。我想知道脚本是否被评估为假(将解释无错误且无操作)。
Colyn1337 2014年

@ Colyn1337是的。它评估为True。
拜伦C.

@ByronC。如果代码块是公正的,会发生什么Remove-Item -Force
Colyn1337 2014年

Answers:


6

我的答案是“是否有更聪明/更简单的方法来做到这一点?” 您的问题的一部分。该脚本已成功为我删除了go爸爸证书

$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代码,以使该代码对于“ copy \ paste \ run” fox不危险。现在,你需要适应$PathWhere-Object并添加$certname变量,但上面的模板应该有你去。


3

尽管我无法使用脚本解决问题,但我能够找到一种“更智能/更简单”的方法来实现自己的目标

从证书颁发机构:

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

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

尽管这需要针对我正在使用的特定模板进行自动注册,但是对所发布脚本的解决方案将是一个更好的答案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.