Alle User einer Gruppe / OU mit PowerShell auslesen

In großen Active Directory Umgebungen kann sehr leicht der Überblick verloren gehen. Beispielsweise hört sich die Aufgabe, alle Benutzer innerhalb einer bestimmten AD-Gruppe aufzulisten, sehr einfach an. Enthält diese Gruppe aber viele weitere verschachtelte Gruppen, ist das Ganze nicht mehr so trivial. Mit Hilfe der PowerShell ist jedoch eine einfache und komfortable Lösung möglich.

Ausgangspunkt ist das Cmdlet „Get-ADGroupMember„. Folgender Befehl identifiziert alle Benutzer einer bestimmten Gruppe, die anschließend nach Namen sortiert aufgelistet werden:

Get-ADGroupMember -Identity GRUPPENNAME -recursive | sort -property name | ft name

Der nachfolgende Befehl listet alle Benutzer auf, die sich innerhalb einer angegebenen OU befinden. Der Befehl muss vor dem Einsatz noch an die eigenen Gegebenheiten angepasst werden.

Get-ADUser -Filter { Name -Like "*" -and Enabled -eq $true } -Searchbase "OU=accounts,OU=usa,DC=test,DC=com" | Where-Object {($_.name -notlike "test*") -and ($_.name -notlike "*_c1")} | sort name | ft name

Tobi

Hallo, mein Name ist Tobias und ich habe diesen Blog im April 2009 ins Leben gerufen. Seitdem blogge ich hier über Software, Internet, Windows und andere Themen, die mich interessieren. SSDblog ist mein zweiter Blog, indem es rund um das Thema SSDs geht. Ich würde mich freuen, wenn ihr meinen Feed abonniert oder mir auf Twitter, Facebook, Google+ und Google+ (privat) folgt.

7 Antworten

  1. Robert sagt:

    Sollten die AD Cmdlets noch nicht integriert sein, wenn die Domain z.B. noch auf Server 2003 basiert, funktionieren die Cmdlets von Quest auch sehr gut:

    http://www.quest.com/powershell/activeroles-server.aspx

  2. tom Sauer sagt:

    Hi,
    das cmdlt get-aduser finde ich schon sehr hilfreich, aber wie kann ich damit abfragen ob User in einer bestimmten Gruppe sind ja/nein als Ausgabe, und den Zeitraum der letzten Anmeldung? Lastlogontimestamp oder wie? das brauche ich für eine Auswertung…

    • Tobi sagt:

      Hier mal ein Beispielcode der ziemlich gut deinen Bedürfnissen entsprechen dürfte. Du musst nur den gewünschten GRUPPENNAMEN im ersten Befehl abändern.

      [code]$groupmembers = Get-ADGroupMember -Identity GRUPPENNAME -recursive;
      foreach($member in $groupmembers)
      {
      $username = $member.name
      $user = Get-ADUser -Identity $username -Properties LastLogonTimeStamp | sort Name
      $time = [datetime]::FromFileTime($user.LastLogonTimeStamp)
      Write-Host $user.name "+" $time
      }[/code]

      Weitere Anpassungen kannst du dann relativ einfach mit Hilfe von Google vornehmen.

  3. Tom Sauer sagt:

    Hi Tobi,

    vielen Dank.
    das probierre ich nachher aus. Muss als Gruppenname dann der gesamte Ad Pfad anggeben werden? und als Angabe für die identity jeweils der Pfad?
    Powershell ist so umfassend, da brauchts echt bis man das ausreichend mit Durchblick betrachtet 🙂

  4. Isabelle sagt:

    hi tobi,

    ist es möglich alle gruppen einer bestimmten OU auszugeben mit den dazugehörigen Mitgliedern?
    Also in einer OU liegt gruppe1, gruppe2,… jeder Gruppe hat Mitglieder. und ich möchte eine Datei die so etwa aussieht:
    Gruppe1 Mitglied1, mitglied2
    Gruppe2 Mitglied1,mitglied2

    • Tobi sagt:

      Klar das ist kein Problem. Hättest du sicher auch selbst geschafft 😉 Ist aber nur Quick’n’Dirty, den Rest mit der Formatierung usw. kannst du ja bei Google nachlesen.

      [ps]Get-ADGroup -Filter { Name -Like "*" } -Searchbase "OU=accounts,OU=usa,DC=test,DC=com" | Get-ADGroupMember -recursive | FT samaccountname[/ps]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.