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
Sie sehen gerade einen Platzhalterinhalt von X. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen
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
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…
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.
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 :-)
Nein es reicht wenn du GRUPPENNAME mit dem Namen im AD ersetzt.
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
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]
Hi, ist es möglich im AD eine Abfrage zu machen in welcher auch Benutzer einer OU Aufgrund einer anderen ausgeschlossen wird.
Z.B. Kann ich mir mit
Get-ADGroupMember -Identity $Word | select name | alles was in der Gruppe Word ist anzeigen.
Jedoch möchte ich, dass alles, was in der Gruppe $Ohne ist nicht angezeigt wird.
Vielleicht kannst du mir hier helfen. Danke
Nein das wird mit dem Cmdlet „Get-ADGroupMember” nicht unterstützt. Hier müsstest du beide OUs separat auslesen und die beiden Ergebnisse vergleichen bzw. die doppelten User entfernen. Mit ein wenig Recherche bei Google solltest du das hinbekommen.