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.
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.
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
Je devais ajouter .name
après $group
pour que cela fonctionne pour moi.
$Arrayofmembers = Get-ADGroupMember -identity $Group.name -recursive | select name,samaccountname
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
}
}
}
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 *