Active Directory : comment identifier les groupes vides ?
I. Présentation
Lorsque l'on requête un annuaire Active Directory, notamment lorsqu'il s'agit de faire du tri, ou dans le cadre d'un audit, on peut chercher à obtenir la liste des groupes de sécurité vides. Dans cet article, je vais partager avec vous un bout de code PowerShell qui permet de récupérer la liste des groupes vides dans l'Active Directory.
Libre à vous ensuite d'exploiter cette liste, pour supprimer les groupes en question, par exemple.
II. PowerShell et Get-ADGroupMember
Le module Active Directory de PowerShell est relativement bien fourni. Il intègre un cmdlet nommé Get-ADGroupMember et qui sert à récupérer la liste des membres d'un groupe. Cela est intéressant, car ça nous permettra de récupérer de compter les membres de chaque groupe.
Ce que l'on cherche à faire : récupérer la liste de tous les groupes, et, pour chaque groupe, lister le nom de ceux qui sont vides.
Le bout de code suivant permet d'exécuter une action sur tous les groupes avec 0 membre :
Get-ADGroup -Filter * | Foreach{ if($((Get-ADGroupMember -Identity $_).Count) -eq 0){ <action à réaliser> } }
Ensuite, il ne reste plus qu'à afficher le nombre du groupe dans la console, ou d'ajouter son nom dans un fichier, ce qui donne :
Get-ADGroup -Filter * | Foreach{ if($((Get-ADGroupMember -Identity $_).Count) -eq 0){ Write-Output "Groupe $_" Add-Content -Path "C:\Log_GroupsEmpty.log" -Value $_ } }
Enfin, nous pouvons aller plus loin en supprimant les groupes vides grâce à la commande Remove-ADGroup. Grâce au fichier de log, nous aurons une liste des groupes supprimés.
Pour supprimer les groupes vides de l'Active Directory, cela donne :
Get-ADGroup -Filter * | Foreach{ if($((Get-ADGroupMember -Identity $_).Count) -eq 0){ Write-Output "Groupe $_" Add-Content -Path "C:\Log_GroupsEmpty.log" -Value $_ Remove-ADGroup -Identity $_ -Confirm:$false } }
Voilà, à vous de jouer... Mais attention quand même avec ce type de script. Je vous recommande de l'exécuter sans la commande Remove-ADGroup dans un premier temps pour voir vérifier quelques groupes qui ressortent 🙂
Débutant avec PowerShell ? ➡? Débuter avec PowerShell
sinon, on peut utiliser la propriété ‘member’ de l’objet adgroup
la commande devient alors:
Get-ADGroup -filter * -Properties member | Where-Object member -eq $null
Simple et efficace ! 🛫