Jump to content

Alle Mitglieder einer bestimmten Group aus AD auslesen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo liebe Community

 

Habe gerade angefangen, mit Powershell herumzuexperimentieren und es macht Spass. Allerdings stehe ich jetzt etwas an. Ich möchte von allen Benutzern aus dem gesamten AD, die einer bestimmten Gruppe angehören, bestimmte Attribute auslesen.

 

Bis jetzt habe ich folgenden Code:

$SearchBase = 'OU=Standard,OU=User,OU=xxx,OU=xxxx,DC=xxxx,DC=xxxx'
Get-ADUser -Filter * -SearchBase $SearchBase -properties Title,department,telephonenumber,mobile,mail

Das funktioniert eigentlich grundsätzlich. Ich würde den Script aber gerne etwas optimieren... und zwar möchte ich nur die Accounts aufgeführt haben, die in der Gruppe "XY" sind. Wie baue ich meinen Code entsprechend um? Habe es so versucht:

Get-ADUser -Filter * -SearchBase $SearchBase | Where-Object {$_.MemberOf -contains "GruppeXY"}

Wenn mich diesen Starte... passiert nix. Der Cursor springt auf die nächste Zeile und gut ist, keinen Fehler oder ähnliches. Was mache ich falsch?

 

Und dann hätte ich noch eine zweite kleine Frage:. Wenn ich ganz normal den Get-ADUser-Befehl starte ohne spezielle Params, dann kriege ich ja einen bestimmten Datensatz mit vordefinierten Attributen raus (DistinguishedName, GivenName etc.). Ich möchte aber jedes Attribut selbst bestimmten was ausgelesen wird. Das Ziel ist, nur die Daten zu bekommen die ich auch weiterverarbeiten möchte.

 

Danke für Eure Hilfe und bis später :-)

 

Beste Grüsse - quen

Link zu diesem Kommentar

Ich würde Dir empfehlen, die Gruppenmitglieder mittels Get-ADGroupMember zu ermitteln und nur diese dann per Pipe an ein Foreach-Object weiterzugeben und darin dann mittels Get-ADUser nur diese User aus dem AD zu saugen. Das sollte deutlich schneller gehen, als das ganze AD oder die ganze -SearchBase erst auszulesen und dann hinterher zu filtern. Das cmdlet Get-ADUser hat einen Parameter -Properties. Damit kannst Du, neben den per default ausgegebenen Attributen, weitere angeben, die Du ausgegeben haben möchtest. Welche es insgesamt gibt, kannst Du einfach ermitteln, in dem Du mal z.B. Deinen eigenen Account mit Get-ADUser -Identity 'UserName' -Properties * ausgibst.

Unabhängig von all dem, ist es immer empfehlenswert, die Hilfe der cmdlets zu lesen, die Du benutzt bzw. benutzen möchtest ...  komplett und inklusive der Beispiele.  ;-):D

bearbeitet von BOfH_666
Link zu diesem Kommentar

Danke für die Hinweise. Ich habe mir die Hilfen und Beispiele angeschaut und im Lab einiges versucht.. so ganz verstehe ich den Foreach-Object Befehl noch nicht.

 

Get-ADGroupMember -Identity BeekeeperBenutzer | ForEach-Object Get-ADUser -Filter * -Properties Title,department

Ich verstehe nicht, wie ich den ForEach-Object schreiben muss, dass der Script interpretiert werden kann. Ich versuchs weiter, bin aber trotzdem für jeden Tipp dankbar.

 

 

Link zu diesem Kommentar
vor 37 Minuten schrieb quen_to:

 Ich habe mir die Hilfen und Beispiele angeschaut ....

Bist Du sicher?  ;-)

Vielleicht machst Du erst nochmal einen kleinen Schritt zurück und nimmst Dir ein wenig Zeit, um die Grundlagen von Powershell zu erlernen. Das erspart Dir bestimmt eine Menge verschwendeter Zeit, Missverständnisse und Frustration. Es ist bestimmt jenseits der Möglichkeiten eines solchen Forums, Dich Powershell zu lehren.

 

Foreach-Object verarbeitet die über die Pipeline ( | ) weitergereichten Objekte ... eins nach dem anderen. Das jeweilige Object wird durch die Laufvariable ( $_ oder $PSItem ) repräsentiert. Und der gebräuchliste Weg, diese Verarbeitung durchzuführen, ist mit einem Scriptblock, der in geschweifte Klammern ( { ... } ) eingeschlossen ist. Dein Beispiel sollte also ungefähr so aussehen:

Get-ADGroupMember -Identity 'BeekeeperBenutzer' |
    ForEach-Object {Get-ADUser -Identity $_ -Properties Title,department,telephonenumber,mobile,mail }

Um die Ausgabe dann auf die gewünschten Attribute zu beschränken, leitet man die Ausgabe dann noch an ein Select-Object weiter und gibt nur die Properties an die man sehen möchte.

Get-ADGroupMember -Identity 'BeekeeperBenutzer' |
    ForEach-Object {Get-ADUser -Identity $_ -Properties Title,department,telephonenumber,mobile,mail } |
        Select-Object -Property Name,Title,department,telephonenumber,mobile,mail

Es gibt gute Bücher, die Dir die Grundlagen näher bringen können oder Turorials im Internet oder sogar kostenlose Video-Kurse in der Microsoft Virtual Academy - Getting Started with Powershell. Sehr empfehlenswert ist auch der Powershell Best Practices and Style Guide.

bearbeitet von BOfH_666
Link zu diesem Kommentar

Naja... soweit ich in den letzten 3 Stunden mit Lesen/Probieren gekommen bin.. Ja :-)

 

Der Script von Dir hat mich enorm weitergebracht, vor allem zu verstehen wie das ganze mit den Pipes funktioniert. Werde heute noch zu verstehen versuchen, was es mit dem $-Zeichen auf sich hat.

 

Danke tausendmal BOfH_666... und ich habe bereits zwei Bücher da die ich in diesem Monat abarbeiten möchte. Und so Gott will, verstehe ich Powershell irgendwann einmal

 

Danke für alles!

Link zu diesem Kommentar
vor 8 Minuten schrieb quen_to:

... und ich habe bereits zwei Bücher da die ich in diesem Monat abarbeiten möchte.

Ich bin jetzt shcon stolz auf Dich. ;-)  :-)   ...  wenn Du der englishen Sprache einigermaßen mächtig bist, solltest Du Dir den Video-Kurs, den Dir verlinkt hatte, mal ansehen ... der verschafft einem schon einen guten Überblick und Du bekommst die Powershell vom Erfinder erklärt.  :thumb1:

Link zu diesem Kommentar

Ich würde da mal was anders machen beim Foreach... Man kann das pipen, oder man macht es als Schleife. Oben ist die Pipe-Variante. Ich bevorzuge immer

 

$Members = Get-ADGroupMember -Identity 'WeNeedMoreBeer'

Foreach ( $Member in $Members ) { $Member | Select-Object -Property LastOrder }

 

Zum einen ist das schneller (Faktor 2 bis 10), zum anderen erzeugt es deutlich besser lesbaren Code :-)

Link zu diesem Kommentar

Ich konnte zwar mit Eurer Hilfe den Export machen, kann diesen aber aufgrund des Formats nicht in Excel importieren da ich eine Listenansicht mit Überschrift-Spalte benötige. Ich habe zwar eine vermeintliche Lösung gefunden... wenn es denn nur so funktionieren würde wie ich mir das vorstelle

Get-ADUser -Filter * -Properties SamAccountName,GivenName,Surname,title,department,telephonenumber,mobile,mail,userAccountControl -Searchbase "OU=xxx,OU=xxx,OU=xxx,OU=xxx,DC=xxx,DC=xxx" |
    select SamAccountName,GivenName,Surname,title,department,telephonenumber,mobile,mail,userAccountControl

Das Problem ist jetzt wieder das Format. Wenn ich mit dem select-Befehl nur 4 Attribute mitgebe, wird das wunderbar als Liste mit Kopfzeile ausgegeben. Wenn ich nun aber mehr Attribute definiere, kommt die Ansicht wieder in Blöcken. Wie kann ich das unterbinden resp. sicherstellen, dass die Ausgabe in Listenform und somit importierbar gespeichert wird?

 

Man hätte das mit genügend Skills sicher locker mit dem Get-ADGroupMember-Code realisieren können.. nur ist mir das noch zu hoch... :grin3:

 

Danke für jede Hilfe.

Link zu diesem Kommentar

.... und noch ein Hinweis: Wenn Du das cmdlet Export-Csv studiert hast und das ausprobierst und Excel beim Öffnen der CSV-Datei ein bissl zickig ist, weil es ein Deutsches Excel ist und nicht mit dem Komma als Delimiter klarkommt, nimmst Du einfach -Delimiter ';'  .... dann klappt das auch noch. ;-)

bearbeitet von BOfH_666
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...