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 }
}

Из командной строки с повышенными правами:

  • Когда запускается, скрипт не дает вывода (просто новая строка терминала). Он не возвращает ошибок и сертификат не удаляется.
  • Когда аргумент -WhatIfдобавляется в Remove-Itemкоманду в скрипте, снова никаких ошибок и сертификат не удаляется.
  • Когда выполняется Remove-Item. \ CERTIFICATE-THUMBPRINT -Force, сертификат удаляется.

Это проблема с разрешениями? Есть ли более умный / простой способ сделать это?

Спасибо!

Байрон С.
источник
1
ты пробовал remove-item -whatif??
MDMoore313
@BigHomie. Да, я попробовал это. Я, кажется, удалил эту информацию в редактировании ...
Байрон С.
1
В вашем условном кодовом блоке добавьте a, write-hostчтобы вывести что-то на экран, если условное условие истинно. Мне интересно, если сценарий оценивается как ложный (объяснил бы без ошибок и бездействия).
Colyn1337
@ Colyn1337 Да. Это оценка True.
Байрон С.
@ByronC. Что произойдет, если кодовый блок просто Remove-Item -Force?
Colyn1337

Ответы:

6

Мой ответ на вопрос "Есть ли более умный / простой способ сделать это?" часть вашего вопроса. Этот сценарий был успешным в удалении сертификата 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так, чтобы этот код не был опасен для "copy \ paste \ run" folx. Теперь вам нужно адаптировать $Path, Where-Objectи добавить $certnameпеременную, но выше шаблон должен вам идти.

Colyn1337
источник
3

Хотя мне не удалось решить проблему с помощью сценария, я смог найти способ «Умнее / проще» достичь своей цели .

Из центра сертификации:

  • Rt-Click Certificate Templatesи выберитеManage
  • Rt-Click шаблон сертификата, который вы хотите заменить, и выберите Reenroll All Certificate Holders

Это увеличит номер версии шаблона, а сетевые системы с автоматической регистрацией удалят старый сертификат и зарегистрируют новый сертификат.

Хотя для этого требуется автоматическая подача заявок на конкретный шаблон, с которым я работаю, предпочтительным ответом будет решение для опубликованного сценария.

Байрон С.
источник