145971
Goto Top

Suche AD Gruppe, mit den Usern X, Y und Z

Guten Morgen !!

ich habe leider noch keine wirkliche Erfahrung mit der Windows PowerShell, habe aber gelesen, das damit viel möglich ist.
Benötige Hilfe bei folgender Situation:

Möchte gerne wissen, ob es eine Gruppe gibt, wo bestimmte User enthalten sind.
z.B.:

Gibt es eine Gruppe, wo die User
Max.Mustermann
Sabine.Müller
Hans.Muster
enthalten sind?

Wenn ja, wie heißt diese Gruppe?


Gibt es dafür einen Powershell Befehl?

Content-ID: 1321401136

Url: https://administrator.de/contentid/1321401136

Ausgedruckt am: 25.11.2024 um 14:11 Uhr

ITghost
ITghost 29.09.2021 um 09:40:24 Uhr
Goto Top
Hey,
"Get-ADGroup -Filter * "
zeigt dir alle AD Gruppen die du im Active Directory hast.
Wenn du die gewünschte Gruppe gefunden hast - kannst du mit GetADGroupMember dir ausgeben lassen welche Mitglieder in der gesuchten Gruppe sind.
145971
145971 29.09.2021 um 09:44:29 Uhr
Goto Top
Ja das wäre aber nicht das, wonach ich suche.
Erkläre es mal anders:

Mir liegen nur die Personen vor:

Max.Mustermann
Sabine.Müller
Hans.Muster

Jetzt möchte ich wissen, ob es eine oder mehrere gemeinsame Gruppen gibt, wo diese Personen enthalten sind.
Ergebnis könnte dann sein:

Gruppenname_1
Gruppenname_13
usw.
chkdsk
chkdsk 29.09.2021 um 10:31:25 Uhr
Goto Top
Moin,

dein Stichwort lautet Get-ADPrincipalGroupMembership

Grüße
145971
145971 29.09.2021 aktualisiert um 10:44:01 Uhr
Goto Top
Danke !
habe soweit folgendes getestet:

get-adprincipalgroupmembership -Identity Max.Mustermann | select name

hiermit bekomme ich alle Gruppennamen, wo Max.Mustermann Mitglied ist.

Aber wie löse ich das Problem, das ich mehrere User in einer Abfrage habe und nur die gemeinsamen Gruppen sehen möchte?
chkdsk
Lösung chkdsk 29.09.2021 aktualisiert um 11:28:27 Uhr
Goto Top
Du könntest z.B. alle User, die du abfragen möchtest in eine .txt Datei packen und mit Hilfe von get-content die Abfrage gegen die Datei laufen lassen

@145971
wenn du eine Lösung hast, teile sie doch gern mit uns.
emeriks
emeriks 29.09.2021 aktualisiert um 12:55:23 Uhr
Goto Top
Erster Benutzer --> Gruppenmitgliedschaft auslesen
Für jede der gelieferten Gruppe --> Mitgliedschaft ausgeben lassen. Prüfen, ob dort auch alle anderen Benutzer der Suche dabei sind.
Wenn ja --> Gruppe ausgeben.
Cloudrakete
Cloudrakete 29.09.2021 um 13:05:59 Uhr
Goto Top
Moin
$groups1 =@()
$users =@("User1", "User2")  

foreach ($user in $users) 
{
$groups0 = Get-ADPrincipalGroupMembership -Identity $user
$groups1 += New-Object psobject -Property @{user=$user;group=$groups0.name} 
}
$groups2 = $groups1 | Sort-Object -Property Group | Group-Object -Property Group | where {$_.Count -gt 1} | Select-Object -ExpandProperty Name
echo $groups2

Ich hab dir mal quick and dirty was runtergeschrieben, daher sind die Namen der Arrays / Variabeln nicht sonderlich schön, es tut aber was es soll.

Was musst du machen: Bei $users listet du nach dem Format wie schon vorgegebenen die User auf (UPN)
Außerdem musst du den Counter in Zeile 9 erhöhen, wenn du mehr als 2 User in $users angibst.
Beispiel: Du hast 4 User -> Counter auf 3 setzen
Hast du 10 User Counter auf 9 setzen.

Was macht das Skript und was NICHT
Das Skript spuckt dir NUR aus, welche Gruppen alle von dir angegebenen Benutzer gemeinsam haben.
Wenn z.B. nur User 1 und User 2 eine Gruppe gemeinsam haben, aber User 3 - 10 nicht, dann wirst du das ohne weiteres so nicht mit dem Skript rausfinden ... wie gesagt quick and dirty.

Am Ende des Skriptes bekommst du eine Ausgabe auf die Shell welche dir die gemeinsamen Gruppen aller angegebenen Benutzer anzeigt.
149569
Lösung 149569 29.09.2021 aktualisiert um 13:16:26 Uhr
Goto Top
Oder das ganze in kurz...
$users = 'user1','user2','user3'  
$users | %{Get-ADPrincipalGroupMembership $_} | group SamAccountName | ?{$_.Count -eq $users.Count} | select -Expand Name
Cloudrakete
Cloudrakete 29.09.2021 um 13:18:36 Uhr
Goto Top
Zitat von @149569:

Oder das ganze in kurz...
> $users = 'user1','user2','user3'  
> $users | %{Get-ADPrincipalGroupMembership $_} | group SamAccountName | ?{$_.Count -eq $users.Count} | select -Expand Name
> 

Ok, klarer Punkt für dich. Ich hab da auf die schnelle für mich irgendwie nur den scheinbar komplizierten Weg gefunden :D
erikro
erikro 30.09.2021 um 15:40:54 Uhr
Goto Top
Moin,
Zitat von @145971:
ich habe leider noch keine wirkliche Erfahrung mit der Windows PowerShell, habe aber gelesen, das damit viel möglich ist.

Jo, das ist ein echter Toyota.

Gibt es eine Gruppe, wo die User
Max.Mustermann
Sabine.Müller
Hans.Muster
enthalten sind?

Wenn ja, wie heißt diese Gruppe?


Gibt es dafür einen Powershell Befehl?

Ja, der heißt compare-object:

Erstmal vergleichen wir zwei der User:
PS C:\Windows\system32> (Compare-Object (Get-ADPrincipalGroupMembership Max.Mustermann).name (Get-ADPrincipalGroupMembership Sabine.Mueller).name -IncludeEqual -ExcludeDifferent).inputobject
Domänen-Benutzer
g_access2all
g_verwaltung
g_special_logon

Das .name bzw. .inputobject sorgt dafür, dass nur diese Spalte ohne Überschriften ausgegeben wird. Nun willst Du aber drei User vergleichen. Dann wickeln wir einfach noch ein compare-object drumherum.

PS C:\Windows\system32> (compare-object (Compare-Object (Get-ADPrincipalGroupMembership Max.Mustermann).name (Get-ADPrincipalGroupMembership Sabine.Mueller).name -IncludeEqual -ExcludeDifferent).inputobject (Get-ADPrincipalGroupMembership Hans.Muster).name -IncludeEqual -ExcludeDifferent).inputobject
Domänen-Benutzer
g_verwaltung

Und schon siehst Du, dass diese drei User in der gemeinsamen Gruppe g_verwaltung sind.

hth

Erik
Tektronix
Tektronix 05.10.2021 um 07:58:03 Uhr
Goto Top
Moin,
damit kannst Du auch SQL Abfragen aufs AD machen, falls die Dir eher liegen. ;-D
Titel