Anstatt eine Zählung basierend auf dem cert-Objekt zu aktualisieren, müssen Sie während der Iteration weitere Informationen zum Zertifikat speichern. Ich entschied mich dafür, eine zusätzliche Karte mit Fingerabdrücken als Schlüssel und die cert-Objekte als Werte zu erstellen. Die Suche erfolgt also zunächst nach Betreff und dann nach Fingerabdruck.
Ich entferne dann die ältesten Zertifikate und lasse das neueste zurück.
$ht = @{} Get-ChildItem -Recurse Cert:\LocalMachine\My | Where-Object { $_.Issuer -like "*MyIssuer*" } | ForEach-Object { $subject = $_.Subject if (!$ht.ContainsKey($subject)) { $ht[$subject] = @{} } $ht[$subject]["$($_.Thumbprint)"] = $_ } $ht.Keys | ForEach-Object { $dupes = ($ht[$_] | Where-Object { $_.Count -gt 1 }) if ($dupes) { $dupes.GetEnumerator() | Sort-Object [DateTime]"$" -Descending | Select-Object -ExpandProperty Value -Skip 1 | ForEach-Object { if (Test-Path $_.PSPath) { Remove-Item -Path $_.PSPath -DeleteKey } } } }