Listen Sie alle Gruppen und deren Mitglieder mit PowerShell unter Win2008r2 auf

14

Ich bin neu in Powershell, aber ich habe Handbücher gelesen und ein bisschen geübt. Mein Ziel ist es, alle Benutzer in allen Sicherheitsgruppen unter dem angegebenen Pfad aufzulisten. Ich habe den Weg gefunden, es zu tun:

 get-adgroup -Filter * -SearchBase "OU=Groups,DC=corp,DC=ourcompany,DC=Com"  | %{Get-ADGroupMember $_.name} | ft name

Das Problem ist aber, dass ich den Gruppennamen nicht sehe. Alles, was ich bekomme, sind ein paar Benutzer. Es wäre schön, wenn mir jemand sagen könnte, wie der Gruppenname angezeigt werden soll, bevor alle Mitglieder dieser Gruppe aufgelistet werden. Vielen Dank.

Alec T
quelle
2
Wenn Sie nach der Suche mit dem Ändern von herumspielen, erhalten % { "GroupName: $($_.Name)"; "==========" ; Get-ADGroupMember $_ } | ft nameSie möglicherweise auch das, wonach Sie suchen . Ryans Antwort ist immer noch besser, aber das ist eine einzelne Zeile, wenn Sie es wollen.
TheCleaner
Vielen Dank TheCleaner. Wie gesagt, ich bin neu in PS, aber diese Beispiele helfen wirklich beim Verständnis.
Alec T
Ihr Beispiel funktioniert auch gut!
Alec T

Antworten:

26

Gimme the codes! Kräfte, aktiviere!

$Groups = Get-ADGroup -Properties * -Filter * -SearchBase "OU=Groups,DC=corp,DC=ourcompany,DC=Com" 
Foreach($G In $Groups)
{
    Write-Host $G.Name
    Write-Host "-------------"
    $G.Members
}

Der Punkt ist, nehmen Sie sich Zeit und brechen Sie es in Schritten aus. Ich weiß, dass es Spaß macht, zu versuchen, alles und die Küchenspüle mit Powershell in einen Einzeiler zu passen, aber es ist keineswegs erforderlich.

Ein paar Anmerkungen:

  • Dies ist nicht erforderlich, Get-ADGroupMemberwenn Sie die Members-Eigenschaft im ersten Get-ADGroupCmdlet erfassen. Das Gute daran ist, dass sich die Anzahl der Anrufe, die Sie bei AD tätigen müssen, halbiert, wodurch Ihr Skript schneller ausgeführt werden sollte, und der Domänencontroller entlastet wird.

  • $ G.Mitglieder zeigen in Powershell 3 alle Mitglieder der Gruppe $ G ... an. In Powershell 2 müssen Sie möglicherweise noch einen weiteren Foreach in Foreach einfügen, um die Gruppenmitglieder aufzulisten. ( Yo dawg, ich habe gehört, Sie mögen Schleifen ... )

  • Ich benutze Write-Hosthier, was eklig ist. Sie sollten nie wirklich verwenden Write-Host. Stattdessen sollten Sie Objekte erstellen und ausgeben, nicht Text, aber das war ein ganz anderes Thema, und ich war zu faul, das für diese Antwort zu tun.

Ryan Ries
quelle
10

Hier ist eine viel bessere Lösung. Dadurch wird alles in eine dreispaltige CSV mit Gruppenname, Benutzername und Sam-Kontoname eingefügt. Es ist viel einfacher herauszufinden, in welcher Gruppe sich jemand befindet, wenn sich 400 Benutzer in einer Gruppe befinden, da Sie nicht scrollen müssen.

Import-Module ActiveDirectory

$Groups = (Get-AdGroup -filter * | Where {$_.name -like "**"} | select name -ExpandProperty name)

$Table = @()

$Record = @{
  "Group Name" = ""
  "Name" = ""
  "Username" = ""
}


Foreach ($Group in $Groups) {

  $Arrayofmembers = Get-ADGroupMember -identity $Group -recursive | select name,samaccountname

  foreach ($Member in $Arrayofmembers) {
    $Record."Group Name" = $Group
    $Record."Name" = $Member.name
    $Record."UserName" = $Member.samaccountname
    $objRecord = New-Object PSObject -property $Record
    $Table += $objrecord

  }
}

$Table | export-csv "C:\temp\SecurityGroups.csv" -NoTypeInformation
Joseph Alves
quelle
Vielleicht 400 Benutzer in einer Gruppe hinzufügen und Daten aus CSV- oder XLSX-Datei abfangen?
Kiquenet
Entschuldigung für meine Ignoranz, aber in welcher Sprache ist Ihr Code?
ScottC
Entschuldigung für meine Kommentare Verspätung, aber Powershell war die Sprache
Riley Carney
1

Ich musste .namenachher hinzufügen $group, um diese Arbeit für mich zu machen.

$Arrayofmembers = Get-ADGroupMember -identity $Group.name -recursive | select name,samaccountname
Josh
quelle
0

Wenn Sie jemals auf ein Size LimitProblem mit Gruppen mit mehr als 5000 Mitgliedern stoßen, können Sie die eine Zeile wie folgt ändern:

$Arrayofmembers = (Get-ADGroup $Group -Properties member).member | Get-ADUser -Properties *
Willy Kroll
quelle
0

Hier ist ein Skript, das alle Gruppen in einer Organisationseinheit mit Gruppennamen und Beschreibung in eine separate Datei für jede Gruppe exportiert. Wenn jemand das will ..

$groups = Get-ADGroup -filter * -SearchBase "OU=XXX, DC=XX,DC=XX"
ForEach ($g in $groups) 
{
$path = "c:\scripts\" + $g.Name + ".csv"
Get-ADGroup -Identity $g.Name -Properties * | select name,description | Out-File $path -Append

$results = Get-ADGroupMember -Identity $g.Name -Recursive | Get-ADUser -Properties displayname, name 

ForEach ($r in $results){
New-Object PSObject -Property @{       

    DisplayName = $r.displayname | Out-File $path -Append
  }
}   
}
Magneg
quelle