我最近重build了我的PKI,我想删除发给我networking中所有客户端机器的证书。 听起来像是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
命令时,不会再删除错误和证书。 这是一个权限问题? 有一个更聪明/更简单的方法来做到这一点?
谢谢!
我的答案是“有没有更智能/更简单的方法来做到这一点?” 你的问题的一部分。 这个脚本成功地为我删除了一个爸爸证书
$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
以便这个代码对于“复制\粘贴\运行”folx没有危险。 现在,您需要修改$Path
, Where-Object
,并添加$certname
variables,但是上面的模板应该可以继续。
尽pipe我还没有能够解决这个问题,但我find了一个“更智能/更简单”的方法来实现我的目标 。
从证书颁发机构:
Certificate Templates
并selectManage
Reenroll All Certificate Holders
这将增加模板的版本号,使用自动注册的networking系统将删除旧的证书并注册新的证书。
虽然这需要自动注册我正在使用的特定模板,但是发布脚本的解决scheme将是一个更好的答案。