## blog.enguerrand.pro ## Script d'alimentation d'un groupe AD par rapport à des membres de groupes placés dans des ACL d'un répertoire function update { ## fonction appelée pour chaque serveur de fichiers param([string] $srv) Get-ADGroupMember "_users-$srv" | foreach { Remove-AdGroupMember "_users-$srv" -Member $_ -Confirm:$false } ## on vide tout d'abord les groupes pour maintenir une liste à jour $folders = get-childitem "\\$srv.dundermifflin.inc\d$\shares" | get-acl ## récupération des ACL des sous-répertoires du dossier concerné foreach($folder in $folders){ ## pour chaque répertoire... $domacl = $folder.Access | where-object { $_.IdentityReference -like "DUNDERMIFFLIN\*" } ## on récupère les membres du domaine uniquement (dans cet exemple, des groupes) foreach($acl in $domacl){ # et pour chaque ACL... $grpm = Get-ADGroupMember $acl.IdentityReference.Value.SubString(14,($acl.IdentityReference.Value.Length-14)) -Recursive ## on récupère les membres du groupe, de manière récursive pour n'oublier personne foreach($mbr in $grpm) { ## pour chaque membre... $adu = Get-ADuser $mbr -Properties CanonicalName ## on récupère le CN afin de filtrer pour sélectionner que des utilisateurs et non des comptes de service par exemple if($adu.CanonicalName -like "dundermifflin.inc/USERS/*") { Add-AdGroupMember -Identity "_users-$srv" -Members $mbr } ## si c'est OK, on ajoute l'utilisateur au groupe } } } } ## on appelle ici la fonction du début du script pour chaque serveur pour lequel on souhaite peupler un groupe update("filesrv01") update("filesrv02") update("filesrv03")