Tags: PowerShell, Active Directory
Das PowerShell-Modul für Active Directory umfasst nicht nur Cmdlets zum Anlegen und Abfragen von Konten, sondern auch zum Löschen derselben. Zuständig dafür sind Remove-ADUSer und Remove-ADComputer. Remove-ADGroup entfernt Gruppen und Remove-ADObject räumt alle Arten von Objekten ab.
Die Cmdlets für das Management von Active Directory sind gegenüber den GUI-Tools im Vorteil, wenn man eine größere Zahl an Objekten erzeugen oder modifizieren möchte. Das gilt etwa für Bulk-Upload von Benutzerkonten genauso wie dann beim Löschen von Accounts.
AD-Objekte filtern und löschen
Das Entfernen einer größeren Anzahl an Objekten erfolgt meistens auf Basis von bestimmten Kriterien, beispielsweise wenn diese deaktiviert wurden, seit langer Zeit inaktiv sind oder einem bestimmten Standort zugeordnet sind.
Daher wird dem Aufruf der Cmdlets vom Typ Remove-AD* meistens eine Abfrage vorausgehen, deren Ergebnis man dann über eine Pipe an den Löschbefehl übergibt. Computer-Konten mit dem Status disabled würde man auf diese Weise ermitteln:
Search-ADAccount -AccountDisabled -ComputersOnly
Weitere Beispiele für das Filtern von Benutzerkonten finden sich im Beitrag Benutzer anlegen, abfragen und ändern mit PowerShell.
User und Computer entfernen
Möchte aber nur einen User- oder Computer-Account entfernen, dann muss man diesen bei Remove-ADUser und Remove-ADComputer über den Parameter Identity spezifizieren. Er akzeptiert als Werte einen Distinguished Name, einen GUID, eine SID oder einen SamAccountName.
In der Regel wird man nur Letzteren präsent haben, während man die anderen Bezeichner erst über Tools ermitteln muss.
Remove-ADUser -Identity BSeidl
Diese einfache Variante des Befehls bewirkt nicht das sofortige Löschen des Kontos BSeidl, sondern fragt erst um Bestätigung nach.
Will man das vermeiden ergänzt man den Aufruf folgendermaßen:
Remove-ADUser -Identity BSeidl -Confirm:$false
Wie man sieht, weicht das AD-Modul von der Konvention ab, die Bestätigung mit dem Schalter -Force zu unterdrücken.
Stellt man dem Löschvorgang eine Abfrage voran, dann würde das Kommando im Zusammenspiel mit dem Beispiel weiter oben so aussehen:
Search-ADAccount -AccountDisabled -ComputersOnly |
Remove-ADComputer -Confirm:$false
Auf diesem Weg würde man alle deaktivierten Computerkonten ohne Nachfrage entfernen. Wenn man vorsichtig agieren möchte, ohne jedes einzelne Konto zu bestätigen, kann man den Befehl mit dem Schalter WhatIf starten und den Parameter Confirm weglassen. Dann sieht man, welche Accounts gelöscht würden:
Search-ADAccount -AccountDisabled -ComputersOnly |
Remove-ADComputer -WhatIf
Gruppen entfernen
Neben den Cmdlets für das Löschen von Benutzern und Computern enthält das AD-Modul noch ein solches für Gruppen. Remove-ADGroup eliminiert sowohl Sicherheits- als auch Verteilergruppen. Es verlangt wie die beiden anderen eine Identity, die sich über einen der 4 genannten Bezeichner angeben lässt.
Um die Namen von Gruppen zu eruieren, eignet sich Get-ADGroup:
Get-ADGroup -Filter "name -like '*Tes*'"
Auch hier bietet sich wieder an, das Ergebnis einer Abfrage über die Pipeline an Remove-ADGroup weiterzuleiten.
Möchte man nur Mitglieder aus einer Gruppe entfernen und diese selbst nicht löschen, dann ist dafür das Cmdlet Remove-ADGroupMember zuständig.
Beliebige Objekte löschen mit Remove-ADObject
Während noch weitere Cmdlets auf das Löschen spezifischer Objekttypen beschränkt sind, zum Beispiel Remove-ADServiceAccount, Remove-ADComputerServiceAccount oder Remove-ADOrganizationalUnit, eliminiert Remove-ADObject diverse Arten von Objekten. Zur Bestimmung des AD-Objekts akzeptiert der Parameter Identity einen Distinguished Name oder einen GUID.
Das dazu ergänzende Cmdlet, mit dem sich Objekte ermitteln lassen, ist Get-ADObject. Mit Hilfe des Parameters Filter lassen sich praktische alle Attribute für eine Suche heranziehen.
$ChangeDate = [datetime]"01.01.2017"
Get-ADObject -Filter 'whenChanged -lt $ChangeDate'
In diesem Beispiel gibt das Cmdlet alle Objekte zurück, die vor dem 1.1.2017 geändert wurden. Auch hier könnte man das Ergebnis über eine Pipe an Remove-ADObject weiterreichen. Möchte man auf die Bestätigung für jedes Objekt verzichten, dann hilft auch hier der Parameter Confirm.
Wiederherstellen nach versehentlichem Löschen
Hat man trotz aller Sicherheitsmechanismen, welche die Cmdlets für das Löschen von AD-Objekten bieten, zu viele oder die falschen Objekte eliminiert, dann finden sich diese im Papierkorb des Active Directory und lassen sich von dort wiederherstellen.
Voraussetzung ist natürlich, dass dieses Feature aktiviert ist, was aber heute meistens der Fall sein dürfte, nachdem es bereits mit Server 2008 R2 eingeführt wurde. Verifizieren kann man das mit Hilfe dieses Aufrufs:
Get-ADOptionalFeature 'Recycle Bin Feature'
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- Security- und Health-Checks für Active Directory mit PowerShell-Scripts
- Split-brain DNS in Active Directory einrichten
- AD-Konten mit DES- und RC4-Algorithmus für Kerberos-Verschlüsselung finden
- UserAccountControl: Sicherheitseinstellungen für AD-Konten prüfen und ändern
- Gruppen in Azure Active Directory mit PowerShell verwalten
Weitere Links