Jump to content
quen_to

Alle Mitglieder einer bestimmten Group aus AD auslesen

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

Edited by BOfH_666

Share this post


Link to post
Share on other sites

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.

 

 

Share this post


Link to post
Share on other sites
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.

Edited by BOfH_666

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites
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:

Share this post


Link to post
Share on other sites

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 :-)

Share this post


Link to post
Share on other sites
vor 1 Stunde schrieb daabm:

Zum einen ist das schneller (Faktor 2 bis 10),

Hmmm ... wenn Geschwindigkeit wirklich ein relevantes Thema sein sollte - einfach beide Varianten testen mit Measure-Command!

Share this post


Link to post
Share on other sites

Mir ging es mehr um das zweite Argument - lesbarer Code. Nix gegen Pipelining, wenn man das mal kurz auf der Commandline eintippt. Aber der TO sprach von einem Skript, und da finde ich halt Foreach besser als die Pipe. Das ist besser lesbar und damit auch einfacher wartbar. Und auch einfacher zu debuggen :-)

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

Schau dir mal das CmdLet Export-CSV an.

Das ist das was du suchst. Dann klappt auch der Import in Excel.

 

PS: Ich seh grad in deinem Code fehlt die abfrage der Gruppe. Du nimmst alle Uaser aus ein OU.

Edited by tesso

Share this post


Link to post
Share on other sites

.... 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. ;-)

Edited by BOfH_666

Share this post


Link to post
Share on other sites

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...