Remove-Usercert

Beim Betrieb einer Windows Zertifizierungsstelle (MSXFAQ.DE - CA installieren) kann man die ausgestellten Zertifikate auch im Active Directory veröffentlichen lassen. Nun laufen Zertifikate aber nach einigen Jahren auch wieder ab und sind damit nicht mehr "interessant". Leider scheint es bei der Generierung des Offline Adressbuchs (Exchange Offline Adressbuch anlegen) auch Probleme zu geben, wenn die Zertifikate abgelaufen sind.

Das folgende Skript nutzt PowerShell, um per LDAP die entsprechenden Felder einfach zu leeren.

Achtung
Das Skript löscht damit alle im Active Directory veröffentlichten Zertifikate ohne weitere Rückfrage

Es ist daher eher ein Musterskript für den Einsatz von PowerShell für müssenÄnderungen und weniger ein ausgefeiltes Zertifikatsmanagementskript. Ich würde gerne später dieses Skript erweitern, dass man gezielt die Zertifikate auch ihre Gültigkeit prüft und nur abgelaufene Zertifikate löscht.

# remove-usercerrt.1.0
# - Loads all users from AD with "usercertificate"
# - removes Certificates
#
# Attn: Does not check certificate age etc. its a real "cleanup" skript
#
# Version 1.0 
#	erste triviale Version

$dc="SRV01"
$domain = "msxfaq.local"
$ADS_PROPERTY_CLEAR = 1 

Write-Host "----------------  remove-usercerrt startet -----------------------"

# Search für all NEW objects in active directory
Write-Host " Preparing AD-Search"
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]"LDAP://$dc/$domain")
#$objSearcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]"")
$objSearcher.PageSize = 1000
$objSearcher.Filter = "(&(userCertificate=*))"

Write-Host " Searching ...."
$objSearcher.FindAll() | % {
	Write-Host "----- Processing Object: " $_.path
	#Write-Progress -Activity "Processing users" -Status $_.adspath -PercentComplete ($count / $total *100);
	$adobject = $_.getDirectoryEntry()
	$adobject.userCertificate.Clear()
	#$adobject.PutEx ($ADS_PROPERTY_CLEAR,"userCertificate", 0
	$adobject.setinfo()
}
write-host 'DONE Processing'

Oder zum Download

remove-usercerrt.1.1.ps1
Skript nach dem Download mit der Erweiterung PS1 speichern.

Anpassungen

Schauen Sie sich das Skript genau an und sie sehen, welche Parameter Sie in an ihre Umgebung anpassen müssen. es sind derer zwei

  • $dc="SRV01"
    Geben Sie hier den Namen des Domain Controllers an, welcher genutzt werden soll
  • $domain = "msxfaq.local"
    Hier müssen Sie die Domäne angebend, die bearbeitet werden soll

Erst nach der Anpassung wird das Skript auch wirklich was tun.

Erweiterungen

Zum Zeitpunkt, als das Skript erstellt wurde habe ich mit PowerShell gerade angefangen. Es ist sehr einfach, mit der PIPE zu arbeiten. Daher hoffe ich, bald eine neue Version bereit stellen zu können die ihre Eingaben aus der PIPE annimmt, z.B.: in der Art

Get-Recipient | Remote-UserCert -expiredOnly

Aber ich kann heute noch keinen Zeitpunkt nennen, wann ich dieses Commandlet fertig gestellt haben werde.

Weitere Links