Я недавно перестроил свой 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
в скрипте снова нет ошибок и Сертификат не удаляется.Это проблема с разрешениями? Есть ли более умный / простой способ сделать это?
Спасибо!
Мой ответ - «Есть ли более умный / простой способ сделать это?» часть вашего вопроса. Этот сценарий успешно удалил для меня сертификат 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
чтобы этот код не был опасен для фолкса "копировать \ вставить \ запустить". Теперь вам нужно адаптировать $Path
, Where-Object
и добавьте $certname
переменная, но шаблон выше должен вас заинтересовать.
Хотя мне не удалось решить проблему со скриптом, Я смог найти способ «умнее / проще» достичь своей цели.
От центра сертификации:
Certificate Templates
и выберите Manage
Reenroll All Certificate Holders
Это увеличит номер версии шаблона, и сетевые системы с автоматической регистрацией удалят старый сертификат и зарегистрируются с новым сертификатом.
Хотя для этого требуется автоматическая регистрация для конкретного шаблона, с которым я работаю, предпочтительным ответом было бы решение опубликованного сценария.