Em vez de atualizar uma contagem baseada no objeto cert, é necessário salvar mais informações sobre o certificado durante a iteração. Eu escolhi criar um mapa adicional de impressões digitais como chaves e os objetos certificados como valores. Portanto, a pesquisa é primeiro por assunto e, em seguida, por impressão digital.
Eu então removo os certificados mais antigos e deixo o mais novo.
$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]"${Value.GetDateTimeString()}" -Descending |
Select-Object -ExpandProperty Value -Skip 1 |
ForEach-Object {
if (Test-Path $_.PSPath) {
Remove-Item -Path $_.PSPath -DeleteKey
}
}
}
}