web-dev-qa-db-fra.com

Lister tous les groupes et leurs membres avec PowerShell sur Win2008r2

Je suis nouveau sur PowerShell, mais j'ai lu des manuels et je me suis entraîné un peu. Mon objectif est de répertorier tous les utilisateurs de tous les groupes de sécurité sous le chemin spécifié. J'ai trouvé le moyen de le faire:

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

Mais le problème est que je ne vois pas le nom du groupe. Tout ce que je reçois, c'est un groupe d'utilisateurs. Ce serait bien si quelqu'un pouvait me dire comment afficher le nom du groupe avant que tous les membres de ce groupe soient répertoriés. Merci.

14
Alec T

Gimme the codes! pouvoirs, activez!

$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
}

Le fait est, prenez simplement votre temps et divisez-le en étapes. Je sais que c'est amusant d'essayer de tout faire et que l'évier de la cuisine s'intègre dans une doublure avec Powershell, mais ce n'est en aucun cas requis.

Quelques notes:

  • Vous n'avez pas besoin de faire Get-ADGroupMember si vous collectez la propriété Members dans le répertoire initial Get-ADGroup Cmdlet. La bonne chose à ce sujet est qu'il réduit de moitié le nombre d'appels que vous devez faire à AD, ce qui devrait accélérer l'exécution de votre script et alléger le fardeau du contrôleur de domaine.

  • $ G.Members affichera tous les membres du groupe $ G ... dans Powershell 3. Dans Powershell 2, vous devrez peut-être encore placer un autre Foreach à l'intérieur du Foreach pour les énumérer via les membres du groupe. (Yo dawg, je t'ai entendu comme des boucles ...)

  • J'utilise Write-Host ici, ce qui est dégoûtant. Vous ne devriez jamais vraiment utiliser Write-Host. Au lieu de cela, vous devriez créer et générer des objets, pas du texte, mais c'était un tout autre sujet et j'étais trop paresseux pour le faire pour cette réponse.

26
Ryan Ries

Voici une bien meilleure solution. Cela mettra tout dans un csv à 3 colonnes avec le nom du groupe, le nom d'utilisateur et le nom du compte sam. Il est beaucoup plus facile de déterminer dans quel groupe une personne se trouve lorsqu'il y a 400 utilisateurs dans un groupe, car vous n'avez pas à faire défiler.

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
10
Joseph Alves

Je devais ajouter .name après $group pour que cela fonctionne pour moi.

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

Voici un script qui exporte tous les groupes d'une unité d'organisation vers un fichier distinct pour chaque groupe avec le nom et la description du groupe. Si quelqu'un veut ça ..

$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
  }
}   
}
0
Magneg

Si jamais vous rencontrez le Size Limit problème avec les groupes contenant plus de 5000 membres, vous pouvez modifier la ligne comme suit:

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