Powershell Löschen Sie PKI-Zertifikate aus der Ferne

9

Ich habe kürzlich meine PKI neu erstellt und möchte die Zertifikate löschen, die für alle Clientcomputer in meinem Netzwerk ausgestellt wurden. Klingt nach einem Job für Powershell! Also habe ich dieses Skript geschrieben, um es vom Gruppenrichtlinienobjekt zu verteilen, von SysVol aus auszuführen und beim Start auf Client-Computern auszulösen:

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

An einer Eingabeaufforderung mit erhöhten Rechten:

  • Bei Ran gibt das Skript keine Ausgabe aus (einfach eine neue Terminalzeile). Es werden keine Fehler zurückgegeben und das Zertifikat wird nicht gelöscht.
  • Wenn das Argument -WhatIfdem Remove-ItemBefehl im Skript hinzugefügt wird, treten erneut keine Fehler auf und das Zertifikat wird nicht gelöscht.
  • Wenn Remove-Item. \ CERTIFICATE-THUMBPRINT -Force ausgeführt wird, wird das Zertifikat gelöscht.

Ist dies ein Berechtigungsproblem? Gibt es eine intelligentere / einfachere Möglichkeit, dies zu tun?

Vielen Dank!

Byron C.
quelle
1
hast du es versucht remove-item -whatif??
MDMoore313
@ BigHomie. Ja, das habe ich versucht. Ich scheine diese Informationen in einer Bearbeitung entfernt zu haben ...
Byron C.
1
Fügen Sie in Ihrem bedingten Codeblock ein hinzu write-host, um etwas auf dem Bildschirm abzulegen, wenn die Bedingung erfüllt ist. Ich frage mich, ob das Skript als falsch ausgewertet wird (würde erklären, dass kein Fehler und keine Aktion vorliegt).
Colyn1337
@ Colyn1337 Ja. Es bewertet True.
Byron C.
@ ByronC. Was passiert, wenn der Codeblock nur ist Remove-Item -Force?
Colyn1337

Antworten:

6

Meine Antwort lautet: "Gibt es einen intelligenteren / einfacheren Weg, dies zu tun?" Teil Ihrer Frage. Mit diesem Skript konnte ich erfolgreich ein Go-Daddy-Zertifikat entfernen

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

Ich habe ein hinzugefügt, -WhatIfdamit dieser Code für das Folx "copy \ paste \ run" nicht gefährlich ist. Nun müssen Sie die Anpassung $Path, Where-Objectund die Add $certnameVariable, aber die obige Vorlage sollten Sie gehen.

Colyn1337
quelle
3

Obwohl ich das Problem mit dem Skript nicht lösen konnte, konnte ich einen "intelligenteren / einfacheren" Weg finden, um mein Ziel zu erreichen .

Von der Zertifizierungsstelle:

  • RT-Klicken Certificate Templatesund auswählenManage
  • Klicken Sie mit der rechten Maustaste auf die Zertifikatvorlage, die Sie ersetzen möchten, und wählen Sie sie aus Reenroll All Certificate Holders

Dadurch wird die Versionsnummer der Vorlage erhöht, und Netzwerksysteme mit automatischer Registrierung löschen das alte Zertifikat und registrieren sich mit dem neuen Zertifikat.

Obwohl dies eine automatische Registrierung für die spezifische Vorlage erfordert, mit der ich arbeite, wäre eine Lösung für das veröffentlichte Skript eine vorzuziehende Antwort.

Byron C.
quelle