Jump to content

Alle Mitglieder über Powershell ausgeben, die in bestimmten ActiveDirectory Gruppen sind


Recommended Posts

Hallo zusammen,

 

Schon mal vorab, ich hab absolut keine Erfahrung mit PowerShell.

 

Es geht darum, dass ich herausfinden muss, welche Benutzer in einer oder mehreren Gruppen sind, die immer mit V beginnen und dann 8 Nummer folgen z. B. V12345678. Also ich sehe die Gruppe V12345678 und gehe dann da auf Mitglieder, die Mitglieder die ich darin auffinde, soll ich über Powershell ausgeben. Da sind da sind dann 0 bis x Mitglieder drin, diese sollten Pro V* - Gruppe angezeigt werden. Da es aber mehrere Gruppen im Active Directory gibt, muss ich das da ja schon mal Filtern aufg Gruppen, die mit V beginnen und 8 Zahlen folgen.

 

Der nächste Schritt wäre, diese dann zählen zu lassen.

 

Was noch wichtig wäre ist, dass man rausfindet, ob ein Mitglied einer solchen V* - Gruppe dann auch noch in anderen V* - Gruppen ist oder nicht.

 

Hintergrund ist der, dass ich schauen muss ob sich eine Lizenz pro Maschine mehr lohnt oder Lizenzen für User. Es geht um Virtuelle Umgebung Lizenzen.

 

Ich hab jetzt Stundenlang gegooglet, finde immer wieder sowas wie Get-ADUser oder Get-ADGroupMember aber ich hab keinerlei Erfahrungen im programmieren, sodass mir diese Filterlogik und die Syntax nicht einfällt.

 

Könnte mir da jemand bitte eine kleine Starthilfe geben?

Edited by TobiBe92
Link to post
vor 23 Minuten schrieb cj_berlin:

Moin,

 

naja, mit Get-ADUser bist Du ja schon fast am Ziel, ein user hat ja ein berechnetes Attribut memberOf ;-) 

Hallo :)

 

danke erst mal für Ihre Antwort.

 

Also damit hab ichs mal probieren wollen:

Get-ADUser | WHERE {$_.MemberOf -eq "V*"}

 

Ich komm nicht drauf, wie man Powershell sagt, dass nach dem V noch 8 Zahlen kommen :D

 

Wenn ich Get-ADUser | WHERE {$_.MemberOf -eq "V*"} eingebe, dann fragt mich die Konsole nach einem Filter, wüsste aber nicht was da hinkommt, hab den doch im Code?

Link to post

Naja, ganz so simpel ist es nicht.

 

Get-ADUser musst Du erst mal sagen, dass memberOf benötigt wird.

Dann stehen im memberOf nicht Namen, sondern Distinguished Names von Gruppen

Und das mit 8 Zeichen: Regulärer Ausdruck.

 

Jetzt hast Du wieder was zum Googlen.

  • Like 1
Link to post
vor 3 Stunden schrieb cj_berlin:

Naja, ganz so simpel ist es nicht.

 

Get-ADUser musst Du erst mal sagen, dass memberOf benötigt wird.

Dann stehen im memberOf nicht Namen, sondern Distinguished Names von Gruppen

Und das mit 8 Zeichen: Regulärer Ausdruck.

 

Jetzt hast Du wieder was zum Googlen.

Super, vielen Dank erst mal, also zu Punkt ein, da habe ich -Properties memberOf gefunden, das passt, jetzt weiß Get-AdUser dass das dabei sein muss und es wird auhc angezeigt. bezüglich des regulären Ausdrucks bin ich auf -match gestoßen, vermute mal, dass es eine mischung aus einem Quantifizierer und noch etwas sein muss, dass es mir erlaubt, nur nach usern zu suchen die V und 8 drauffolgende Random zahlen beinhaltet, da steh ich aber auf dem Schlauch, mir fehlt die logische Umsetzung.

 

Bin ich aufm Holzweg? :D

  • Like 1
Link to post

Moin,

 

ja, soweit passen die Erkenntnisse schon. Abhängig von der Umgebung kann es allerdings sein, dass der logische Ansatz trotzdem nicht passt:

  • mit dem Verfahren über "memberOf" findet man nur direkte Mitglieder der Gruppen, keine indirekten (wenn also ein User nur in einer "GruppeX" ist und diese Gruppe ist per Verschachtelung Mitglied einer gesuchten Gruppe "GroupY", dann taucht die gesuchte Gruppe "GroupY" unter "memberOf" nicht auf)
  • in großen AD-Umgebungen kann dieses Vorgehen viel Last erzeugen, weil vom DC zu Client alle Daten übertragen werden müssen und erst der Client das Filtern übernimmt

Ist das eine Ausbildungs-Aufgabe? Oder geht es nur darum, das Ergebnis zu erhalten?

 

Gruß, Nils

 

  • Like 2
Link to post
Am 23.9.2021 um 17:13 schrieb NilsK:

Moin,

 

ja, soweit passen die Erkenntnisse schon. Abhängig von der Umgebung kann es allerdings sein, dass der logische Ansatz trotzdem nicht passt:

  • mit dem Verfahren über "memberOf" findet man nur direkte Mitglieder der Gruppen, keine indirekten (wenn also ein User nur in einer "GruppeX" ist und diese Gruppe ist per Verschachtelung Mitglied einer gesuchten Gruppe "GroupY", dann taucht die gesuchte Gruppe "GroupY" unter "memberOf" nicht auf)
  • in großen AD-Umgebungen kann dieses Vorgehen viel Last erzeugen, weil vom DC zu Client alle Daten übertragen werden müssen und erst der Client das Filtern übernimmt

Ist das eine Ausbildungs-Aufgabe? Oder geht es nur darum, das Ergebnis zu erhalten?

 

Gruß, Nils

 

Moin,

 

entschuldigen Sie die späte Antwort, ich hatte Berufsschule :).

Ich befinde mich tatsächlich in der Ausbildung, jedoch ist das Ergebnis das Entscheidende. Man möchte anhand der Anzahl die ich da rausbekomme entscheiden, ob man Lizenzen pro Maschine oder Lizenzen pro User kauft. Daher ist das eine Mischung aus lernen und Ergebnis, vermute ich mal. :) Ich denke aber, dass das Ergebnis im Vordergrund steht. 

 

Ich habe auch nochmals einen Arbeitskollegen gefragt, er meinte ich muss eher in diese Richtung:

 

Get-ADGroup -Filter 'name -like "V*RDP*"'

 

Wobei der Filter noch immer nicht korrekt ist, zumindest sehe ich so erst mal alle Gruppen die mit V beginnen , da müsste ich noch den regulären Ausdruck hinklatschen, damit er auch nur nach V12345678, also mit 8 random zahlen sucht. Danach muss ich wohl nur noch aus diesen Gruppen die User rausziehen, quasi alle groupmember in Gruppen mit dem genannten Filter. Igrendwie fühlt sicht da aber noch was falsch an, weiß nur nicht was :D.

 

Die aktuelle Fragestellung ist:

 

Welche User sind in Gruppe V* mit 8 random zahlen, also die Gruppennamen sehen immer so aus:

 

V12345678_RDP-Users

V12345678_Administrators

 

Zahlen 1-8 sind immer unterschiedlich

 

LG

Edited by TobiBe92
Link to post
Am 23.9.2021 um 17:13 schrieb NilsK:

Moin,

 

ja, soweit passen die Erkenntnisse schon. Abhängig von der Umgebung kann es allerdings sein, dass der logische Ansatz trotzdem nicht passt:

  • mit dem Verfahren über "memberOf" findet man nur direkte Mitglieder der Gruppen, keine indirekten (wenn also ein User nur in einer "GruppeX" ist und diese Gruppe ist per Verschachtelung Mitglied einer gesuchten Gruppe "GroupY", dann taucht die gesuchte Gruppe "GroupY" unter "memberOf" nicht auf)
  • in großen AD-Umgebungen kann dieses Vorgehen viel Last erzeugen, weil vom DC zu Client alle Daten übertragen werden müssen und erst der Client das Filtern übernimmt

Ist das eine Ausbildungs-Aufgabe? Oder geht es nur darum, das Ergebnis zu erhalten?

 

Gruß, Nils

 

Hab nochmals nachgefragt, das Ergebnis hat Prio, ist also keine Ausbildungs-Aufgabe :)

Link to post

Moin,

 

um wie viele Gruppen geht es denn? Und gibt es da auch Verschachtelungen, wie ich oben beschrieben habe? Ist sichergestellt, dass jeder User nur in maximal einer dieser Gruppen ist? (Sonst müsstest du bei deiner Frage ja auch noch die Mehrfachmitgliedschaften ausfiltern.)

 

Bei solchen einmaligen Auswertungen mache ich es mir normalerweise einfach, aber was "einfach" ist, hängt natürlich von der Gesamtmenge ab.

 

Gruß, Nils

 

  • Like 2
Link to post
vor 55 Minuten schrieb NilsK:

Moin,

 

um wie viele Gruppen geht es denn? Und gibt es da auch Verschachtelungen, wie ich oben beschrieben habe? Ist sichergestellt, dass jeder User nur in maximal einer dieser Gruppen ist? (Sonst müsstest du bei deiner Frage ja auch noch die Mehrfachmitgliedschaften ausfiltern.)

 

Bei solchen einmaligen Auswertungen mache ich es mir normalerweise einfach, aber was "einfach" ist, hängt natürlich von der Gesamtmenge ab.

 

Gruß, Nils

 

Guten Morgen,

 

vielen Dank für die Rückmeldung. Also ein User kann in mehreren solcher Gruppen sein. Es sind schon über 100 Gruppen :).

 

Also ich dachte, dass es genügt, dass von jeder Gruppe die User angezeigt werden, wenn User in mehreren Gruppen sind, müsste man sie ja trotzdem sehen, dann müsste man das halt auch nochmals zählen oder habe ich einen Denkfehler?

 

Quasi so:

 

in Grupe V12345678 ist User XY und wird somit angezeigt

 

in Gruppe V45678321 ist User XY ebenfalls und wird nochmals angezeigt, dann müsste ich das ja nur berücksichtigen, dass der User auch in Gruppe X mit dabei ist?

Edited by TobiBe92
Link to post

Moin,

 

also, ich würde die Aufgabe so lösen:

 

Schritt 1: Ausgeben aller gewünschten Gruppen in eine CSV-Datei

Dazu nähme ich adfind.exe von joeware.net. Da kann man mit LDAP-Filtern arbeiten. Hier braucht man im Wesentlichen den Namen und den distinguishedName pro Gruppe. Eine Gruppe pro Zeile.

 

Schritt 2: Bearbeiten der Gruppenliste mit Excel

Excel fungiert im Folgenden als Skriptgenerator. Hier würde ich mir mit den Stringfunktionen für jede Gruppe ein adfind-Kommando bauen, das mir die Mitglieder der betreffenden Gruppe ausgibt.

Das geht so:

[Excel: Admins unbekannter Liebling | faq-o-matic.net]
https://www.faq-o-matic.net/2008/01/19/excel-admins-unbekannter-liebling/

 

Hier unterscheidet sich dann die Logik: Falls es Verschachtelung gibt, User also indirekte Gruppenmitglieder sein können, dann früge ich das attribut "tokenGroups" ab und suchte also nach solchen Usern, denen die Gruppenmitgliedschaft zugeordnet wird. adfind.exe kann das.

Ist Verschachtelung kein Thema, dann ist es einfacher: Zu jeder Gruppe nur den Inhalt des Attibuts "member" ausgeben.

Ausgabe wieder in eine CSV-Datei.

 

Schritt 3: Bearbeiten der Mitgliederliste

Nun kann man die Mitgliederliste auch noch in Excel öffnen, um die Dubletten (Mehrfachmitgliedschaften) loszuwerden. Dafür hat Excel eine Funktion, die das direkt macht.

 

Gruß, Nils

 

  • Like 2
Link to post
vor 15 Minuten schrieb NilsK:

Moin,

 

also, ich würde die Aufgabe so lösen:

 

Schritt 1: Ausgeben aller gewünschten Gruppen in eine CSV-Datei

Dazu nähme ich adfind.exe von joeware.net. Da kann man mit LDAP-Filtern arbeiten. Hier braucht man im Wesentlichen den Namen und den distinguishedName pro Gruppe. Eine Gruppe pro Zeile.

 

Schritt 2: Bearbeiten der Gruppenliste mit Excel

Excel fungiert im Folgenden als Skriptgenerator. Hier würde ich mir mit den Stringfunktionen für jede Gruppe ein adfind-Kommando bauen, das mir die Mitglieder der betreffenden Gruppe ausgibt.

Das geht so:

[Excel: Admins unbekannter Liebling | faq-o-matic.net]
https://www.faq-o-matic.net/2008/01/19/excel-admins-unbekannter-liebling/

 

Hier unterscheidet sich dann die Logik: Falls es Verschachtelung gibt, User also indirekte Gruppenmitglieder sein können, dann früge ich das attribut "tokenGroups" ab und suchte also nach solchen Usern, denen die Gruppenmitgliedschaft zugeordnet wird. adfind.exe kann das.

Ist Verschachtelung kein Thema, dann ist es einfacher: Zu jeder Gruppe nur den Inhalt des Attibuts "member" ausgeben.

Ausgabe wieder in eine CSV-Datei.

 

Schritt 3: Bearbeiten der Mitgliederliste

Nun kann man die Mitgliederliste auch noch in Excel öffnen, um die Dubletten (Mehrfachmitgliedschaften) loszuwerden. Dafür hat Excel eine Funktion, die das direkt macht.

 

Gruß, Nils

 

Vielen lieben Dank für den Lösungsvorschlag, jedoch habe ich keine Rechte um irgendetwas zu installieren und das wird hier auch eher ungern gesehen, heißt also, dass ich zu 99% nichts downloaden darf.  Komme also nicht an die adfind.exe ran :/. Wenn ich auf den Downloadlink klicke, kommt 404: Eror File or Directory not found. Ist sogar dort schon gesperrt  Bin da leider an Powershell gebunden

Edited by TobiBe92
Link to post

Moin,

 

und wenn du für die IT so eine Aufgabe lösen sollst, lässt sich da nix machen? Meiner Erfahrung nach kann man mit Leuten reden.

 

Am Ende hängt es aber auch nicht an adfind.exe, das macht es nur viel einfacher, als wenn man alles in PS selbst bauen muss. Du kannst den Aufbau in mehreren Schritten ja auch mit der PowerShell machen. Ich finde es halt, wenn es nur einmalig sein soll, in aller Regel viel einfacher, für sowas keine verschachtelten Programmschleifen bauen zu müssen, bei denen man schnell Fehler einbaut und die viel Aufwand beim Testen machen. Daher zerlege ich sowas lieber, auch wenn es nicht so elegant ist.

 

Gruß, Nils

 

  • Like 2
Link to post
vor einer Stunde schrieb NilsK:

Moin,

 

und wenn du für die IT so eine Aufgabe lösen sollst, lässt sich da nix machen? Meiner Erfahrung nach kann man mit Leuten reden.

 

Am Ende hängt es aber auch nicht an adfind.exe, das macht es nur viel einfacher, als wenn man alles in PS selbst bauen muss. Du kannst den Aufbau in mehreren Schritten ja auch mit der PowerShell machen. Ich finde es halt, wenn es nur einmalig sein soll, in aller Regel viel einfacher, für sowas keine verschachtelten Programmschleifen bauen zu müssen, bei denen man schnell Fehler einbaut und die viel Aufwand beim Testen machen. Daher zerlege ich sowas lieber, auch wenn es nicht so elegant ist.

 

Gruß, Nils

 

Hey,

 

nein leider nicht, Die sind da sehr streng und da es ja eine andere Möglichkeit gibt, die zur Verfügung steht, erwarten die halt, dass ich damit eine Lösung finde. Das Argument nachdem ich darauf verwiesen habe, dass es so so weniger kompliziert machbar wäre, meinten sie nur, dass das über Powershell auch nicht schwer sei.

 

Ich komm jedoch nicht auf die Lösung..

 

Die Infos die ich noch erfragt habe war, dass man sowohl die V*-Gruppen_RDP_users braucht als auch die V*-Gruppen_Administratoren, es ist egal wenn Benutzer in mehrere Gruppen sind, bzw. die zählen auch. dDie zählen also mit in die Zählung, wenn ein User in 5 Gruppen ist, zählt er 5 mal.

Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...