Appliquer les ACL
Introduction
Nous avons créé les répertoires, créé les GDL, et mis en place leur hiérarchie, ne reste plus qu'à appliquer des droits à nos GDL sur leur dossiers respectifs.
Application des droits
Voici le script qui permet d'appliquer les droits à chaque GDL homonymique de son répertoire, ainsi que l'héritage des groupes RW à l'ensemble des enfants :
Param(
[string]$RootPath = "D:\Chemin\destination",
[string]$CsvPath = "C:\chemin\vers\GDLMapping.csv"
)
# Vérifier droits administratifs
if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Warning "Le script doit être lancé en tant qu'administrateur."
exit
}
# Lecture du CSV
$GDLMapping = Import-Csv -Path $CsvPath -Encoding UTF8
# Comptes supplémentaires à RW
$RWAdmins = @("Administrateurs", "Admins du domaine", "SYSTEM")
foreach ($entry in $GDLMapping) {
# Construire le chemin complet correctement
$folderFullPath = Join-Path -Path $RootPath -ChildPath $entry.FolderPath
if (-not (Test-Path -LiteralPath $folderFullPath)) {
Write-Warning "Dossier introuvable pour $($entry.GDLNameRO) → $folderFullPath"
Write-Warning "Dossier introuvable pour $($entry.GDLNameRW) → $folderFullPath"
continue
}
try {
# Réinitialiser ACL existantes
$acl = Get-Acl -LiteralPath $folderFullPath
$acl.SetAccessRuleProtection($true, $false) # désactiver héritage, supprimer règles existantes
$acl.Access | ForEach-Object { $acl.RemoveAccessRule($_) }
# Appliquer RW aux groupes RW (récursif)
$rwRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
$entry.GDLNameRW,
"Modify",
"ContainerInherit,ObjectInherit",
"None",
"Allow"
)
$acl.AddAccessRule($rwRule)
# Appliquer RO aux groupes RO (uniquement dossier)
$roRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
$entry.GDLNameRO,
"ReadAndExecute",
"ContainerInherit",
"None",
"Allow"
)
$acl.AddAccessRule($roRule)
# Appliquer RW aux comptes administratifs (récursif)
foreach ($admin in $RWAdmins) {
$adminRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
$admin,
"Modify",
"ContainerInherit,ObjectInherit",
"None",
"Allow"
)
$acl.AddAccessRule($adminRule)
}
# Sauvegarder les ACL
Set-Acl -LiteralPath $folderFullPath -AclObject $acl
Write-Host "Droits appliqués sur $folderFullPath"
} catch {
Write-Warning "Erreur sur $folderFullPath : $_"
}
}
Parfait ! Nous avons à présent mise en place l'AGDLP pour une gestion des droits beaucoup plus fine, facile, et modulable dans le temps.
De plus, ce script s'appuie sur un répertoire racine qui peut etre modifié, si jamais une nouvelle branche devait être créé dans le partage.

No comments to display
No comments to display