Oftmals hangelt man sich durch AD-Gruppen, um herauszufinden ob Einträge dort enthalten sind. Dabei kommt man immer wieder an seine Grenzen, wenn es darum geht, die Zugehörigkeiten zu einer Active Directory Gruppe ausschließen. Also zu prüfen, ob jemand in einer Gruppe explizit nicht enthalten ist.

Hierzu kann man sich mittels Powershell auch Listen bedienen, die in Programmiersprachen dann als Arrays verfügbar sind. Hier ist das Stichwort “hashmap”.

Als erste Maßnahme sollte man sich mit dem jeweiligen AD verbinden, wenn es AzureAD, bzw. jetzt EntraID, heißt:

Connect-AzureAD

Dann sucht man sich die AD-Gruppen IDs raus, die man prüfen will, bzw. definiert sie:

$groupids = @("Gruppen ID 1", "Gruppen ID 2") 

Nun definiert man seine Hash Map:

$userht = @{}

Und ruft dann alle Benutzer ab und pipet das Ergebnis dann an eine foreach-Schleife, die alle IDs der Benutzer in die Hash Map kippt:

Get-AzureADUser -all $true | foreach-object {$userht.Add($_.ObjectId,$_)}

Mit dem Zwischenschritt eines Counts sieht man die gesamte Anzahl wie folgt:

$userht.count

Nun geht man die Gruppen IDs einzeln durch und holt sich alle Benutzer, die in diesen Gruppen enthalten sind, und löscht einzeln mittels foreach die Benutzer aus der Hash Map raus.

ForEach($id in  $groupids){ 

Get-AzureADGroupMember -all $true -ObjectId $id | foreach-object { $userht.Remove($_.ObjectId) }

}

$userht.count

$userht.values > C:\temp\export.csv

Ergebnis sind dann alle Benutzer aus der ursprünglichen Abfrage minus der Mitglieder in den Vergleichsgruppen. Übrig sind also alle Einträge, die nicht in den Vergleichsgruppen enthalten sind.