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команди в скрипті, знову не виникає помилок і сертифікат не видаляється.
  • Якщо Вилучити-елемент. \ CERTIFICATE-THUMBPRINT -Force запускається, сертифікат видаляється.

Це проблема з дозволом? Чи є розумніший / простіший спосіб зробити це?

Дякую!


1
ти спробував remove-item -whatif??
MDMoore313

@BigHomie. Так, я спробував це. Я, здається, видалив цю інформацію в редакції ...
Байрон К.

1
У свій умовний кодблок додайте а, write-hostщоб скинути щось на екран, якщо умовне є істинним. Мені цікаво, чи сценарій оцінюється як помилковий (пояснював би відсутність помилок і жодних дій).
Colyn1337

@ Colyn1337 Так. Це оцінка True.
Байрон Ч.

@ByronC. Що станеться, якщо кодовий блок просто Remove-Item -Force?
Colyn1337

Відповіді:


6

Моя відповідь: "Чи є розумніший / простіший спосіб зробити це?" частина вашого запитання. Цей сценарій мав успіх у видаленні для мене тата Cert

$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змінну, але вище шаблон повинен вам йти.


3

Хоча мені не вдалося вирішити проблему зі сценарієм, я зміг знайти «розумніший / простіший» спосіб досягти своєї мети .

Від органу сертифікації:

  • Клацніть Certificate Templatesі виберітьManage
  • Rt - клацніть шаблон шаблону сертифіката, який потрібно замінити та вибрати Reenroll All Certificate Holders

Це збільшить номер версії шаблону, і мережеві системи з автоматичною реєстрацією видалять старий сертифікат і зареєструються з новим cert.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.