Die Powershell entfernt deaktivierte Benutzer aus AD-Gruppen

Bei sehr vielen Gruppen in einem ActiveDirectory, kann es schon mal vorkommen das man beim Deaktivieren eines Users vergisst, diesen aus den Gruppen zu entfernen. Nein natürlich darf so etwas nicht passieren, aber bei einer gewachsenen Struktur und bei einer starken Fluktuation innerhalb der IT-Abteilung, kann es schon mal vorkommen das die User einfach deaktiviert wurden und in den Gruppen verbleiben.

Wir wollen also unser AD mal gehörig ausmisten und nimmt sich zuerst einmal die deaktivierten User vor. Nein, ein löschen der User kommt nicht in Frage. Zumindest nicht wenn der- oder diejenige wieder in das Unternehmen einsteigt oder gerade im Babyjahr ist und und und. Es gibt also viele Gründe einen User nicht einfach so zu löschen. Auch und vor allem aus rechtlicher Sicht ist es einigen Unternehmen nicht gestattet einen User einfach so aus dem AD zu entfernen.

Im Normalfall geht der Administrator also her und löscht den Benutzer aus den entsprechenden Gruppen, um diesen dann anschließend in eine hoffentlich vorhandene OU "Deaktivierte Benutzer" zu verschieben. Wie gesagt im Normalfall. :-)

Wie eingangs bereits erwähnt kann es aber aus vielen Gründen auch vorkommen das Deaktivierte Benutzer noch in irgendwelchen Gruppen rumgeistern. Diese gilt es aufzuspüren und aus den Gruppen zu entfernen. Und das macht genau der kleine Codeschnippsel:

# Bildschirmausgabe leeren
CLS

# AD Module importieren bzw. notwendige Snapins laden
import-module ActiveDirectory
if ( (Get-PSSnapin -Name Quest.ActiveRoles.ADManagement -ErrorAction SilentlyContinue) -eq $null ) {
    Add-PsSnapin Quest.ActiveRoles.ADManagement
}


# Alle Gruppen aus dem AD in das Array $groups laden
# In diesem Fall alle Gruppen die mit PRT beginnen
$groups = Get-ADGroup -filter 'name -like "PRT*"'
foreach ($group in $groups) {
    # Alle deaktivierten User aus der Gruppe in das Array $users laden
    $users = Get-QADGroupmember $group.name -Disabled
    
    if($users.length -gt 0) {
        # Nur wenn deaktivierte User Vorhanden sind - User aus der Gruppe entfernen
        foreach ($user in $users) {
            Write-Host "Entferne User: " $user.Name
            Remove-ADGroupMember $group.name $user.samAccountName -Confirm:$false
        }
    } else {
        # Wenn keine deaktivierten User vorhanden sind - Meldung ausgeben
        Write-Host "Keine deaktivierten User vorhanden"
    }
}

Noch eine kleine Anmerkung zum Gebrauch. Wer diesen Schnippsel einfach so über sein AD hämmert bzw. die Gruppen mittels "*" selektiert, der sollte sich vorher Gedanken über einen neuen Job machen von dem er vielleicht mehr versteht. :-)