Benutzer, Computer und Gruppen im Active Directory löschen mit PowerShell

    AD-Objekte löschenDas PowerShell-Modul für Active Direc­tory um­fasst nicht nur Cmdlets zum An­legen und Ab­fragen von Kon­ten, son­dern auch zum Löschen der­selben. Zu­ständig da­für sind Remove-ADUSer und Remove-ADComputer. Remove-ADGroup ent­fernt Grup­pen und Remove-ADObject räumt alle Ar­ten von Ob­jekten 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, beispiels­weise 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.

    Distinguished Name, GUID, SID und SamAccountName über Get-ADUser erfragen

    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.

    Löschen eines AD-Benutzers mit Nachfrage durch Get-ADUser

    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

    Mit dem Schalter WhatIf kann man sich sicherheitshalber noch anzeigen lassen, welche Konten gelöscht würden.

    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 Verteiler­gruppen. 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 weiter­zuleiten.

    AD-Gruppe mit Remove-ADGroup löschen

    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 weiter­reichen. 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 Sicherheits­mechanismen, 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 wieder­herstellen.

    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'

    Keine Kommentare