## blog.enguerrand.pro ## Script de création automatique de partage DFS et de mise en place d'ACL à partir de groupes AD param([Parameter(Mandatory=$true)][string]$ShareName) ## Déclaration des variables à adapter à l'environnement d'exécution du script $path = "D:\DFS" ## chemin sur le disque des répertoires DFS $dfspath = "\\dundermifflin.com\DFS" ## chemin DFS $srvname = "PWFILE01" ## nom du serveur sur lequel le répertoire est créé $ou = "OU=DFS,OU=Access_Groups,DC=dundermifflin,DC=com" ## chemin LDAP où créer les groupes d'accès DFS $readarray = @() ## les users en lecture seront placés dans ce tableau $writearray = @() ## les users en écriture seront placés dans ce tableau $readgroup = "DFS-$ShareName-RX" ## nom du groupe avec accès en lecture $writegroup = "DFS-$ShareName-W" ## nom du groupe avec accès en écriture New-Item -path $path -name $ShareName -ItemType "Directory" -ErrorAction Stop | Out-Null ## création du répertoire de base sur le disque ## Création des groupes AD New-ADGroup -Name $readgroup -GroupCategory Security -GroupScope DomainLocal -Path $ou -Description "\\dundermifflin.com\DFS\$ShareName - Read Only" -ErrorAction Stop New-ADGroup -Name $writegroup -GroupCategory Security -GroupScope DomainLocal -Path $ou -Description "\\dundermifflin.com\DFS\$ShareName - Write" -ErrorAction Stop ## Création du share SMB, nécessaire pour ensuite l'ajouter au DFS New-SmbShare -Name $ShareName -Path "$path\$ShareName" -FullAccess "BUILTIN\Administrators" -ReadAccess $readgroup -ChangeAccess $writegroup -ErrorAction Stop ## Peuplement des tableaux pour remplir les groupes AD créés Write-Host "You will be prompted the usernames to add to the read-only access group. Please input only one user at a time. When you are done, leave the field empty and press enter." do { $readacc = Read-Host "Account name to add to the READ group" if($readacc -ne "") {$readarray+=$readacc} ## si la saisie n'est pas vide, alors on ajoute le compte au tableau } while($readacc -ne "") ## tant qu'on a un user saisi, on repropose à l'user de saisir un nom Write-Host "Now you will be prompted the usernames to add to the modification group. Please input only one user at a time. When you are done, leave the field empty and press enter." do { $writeacc = Read-Host "Account name to add to the WRITE group" if($writeacc -ne "") {$writearray+=$writeacc} ## si la saisie n'est pas vide, alors on ajoute le compte au tableau } while($writeacc -ne "") ## tant qu'on a un user saisi, on repropose à l'user de saisir un nom ## Peuplement des groupes AD à partir des tableaux if($readarray -ne $null) { Add-ADGroupMember -Identity $readgroup -Members $readarray } if($writearray -ne $null) { Add-ADGroupMember -Identity $writegroup -Members $writearray } ## Gestion des ACL : suppression de l'héritage puis ajout des groupes AD, des droits systèmes / administrateur $acl = Get-Acl "$path\$ShareName" ## récupération des ACL $acl.SetAccessRuleProtection($true,$false) ## suppression de l'héritage $readacl = New-Object Security.AccessControl.FileSystemAccessRule("DUNDERMIFFLIN\$readgroup","ReadAndExecute, Synchronize",3,0,"Allow") ## droits en lecture/écriture $acl.SetAccessRule($readacl) $writeacl = New-Object Security.AccessControl.FileSystemAccessRule("DUNDERMIFFLIN\$writegroup","Modify, Synchronize",3,0,"Allow") ## droits en écriture $acl.SetAccessRule($writeacl) $sysacl = New-Object Security.AccessControl.FileSystemAccessRule("NT AUTHORITY\System","FullControl",3,0,"Allow") ## droits pour le compte SYSTEM $acl.SetAccessRule($sysacl) $admacl = New-Object Security.AccessControl.FileSystemAccessRule("BUILTIN\Administrators","FullControl",3,0,"Allow") ## droits pour les admin. locaux du serveur, nécessaire pour DFS $acl.SetAccessRule($admacl) $acl | Set-Acl ## écriture des ACL New-DfsnFolder -path "$dfspath\$ShareName" -Target "\\$srvname\$ShareName" ## création du dossier DFS