Hiérarchie des GDL
Introduction
AfinNous de pouvoir administrer au mieux les droits, il fautreprenons une hiérarchie,nouvelle un exemple avecfois notre structurefichier de testCSV :
| FolderPath | GG_RW | GG_RO | GDL_RW | GDL_RO | Parent_GDL |
| 00-Commun | Tous les utilisateurs | GDL_00_RW | GDL_00_RO | ||
| 00-Commun\01-Scan | Tous les utilisateurs | GDL_00-01_RW | GDL_00-01_RO | GDL_00_RO | |
| 00-Commun\02-Sport | GG_Sport | GDL_00-02_RW | GDL_00-02_RO | GDL_00_RO | |
| 01-RH | GG_RH, GG_Direction | GDL_01_RW | GDL_01_RO | ||
| 01-RH\01-Paie | GDL_01-01_RW | GDL_01-01_RO | GDL_01_RO | ||
| 01-RH\01-Paie\01-2025 | GDL_01-01-01_RW | GDL_01-01-01_RO | GDL_01-01_RO | ||
| 01-RH\01-Paie\01-2025\01-Janvier | GDL_01-01-01-01_RW | GDL_01-01-01-01_RO | GDL_01-01-01_RO | ||
| 01-RH\01-Paie\01-2025\02-Février | GDL_01-01-01-02_RW | GDL_01-01-01-02_RO | GDL_01-01-01_RO | ||
| 01-RH\01-Paie\01-2025\03-Mars | GDL_01-01-01-03_RW | GDL_01-01-01-03_RO | GDL_01-01-01_RO | ||
| 01-RH\01-Paie\01-2025\04-Avril | GDL_01-01-01-04_RW | GDL_01-01-01-04_RO | GDL_01-01-01_RO | ||
| 01-RH\01-Paie\01-2025\05-Mai | GDL_01-01-01-05_RW | GDL_01-01-01-05_RO | GDL_01-01-01_RO | ||
| 01-RH\02-Formation | GDL_01-02_RW | GDL_01-02_RO | GDL_01_RO | ||
| 01-RH\03-Carrière | GDL_01-03_RW | GDL_01-03_RO | GDL_01_RO | ||
| 02-Informatique | GG_Informatique | Tous les utilisateurs | GDL_02_RW | GDL_02_RO | |
| 02-Informatique\01-Procédures | Tous les utilisateurs | GDL_02-01_RW | GDL_02-01_RO | GDL_02_RO |
FolderPath;GG_RW;GG_RO;GDL_RW;GDL_RO;Parent_GDL
00-CommunCommun;;Tous les utilisateurs;GDL_00_RW;GDL_00_RO;
00-Commun\01-ScanScan;Tous les utilisateurs;;GDL_00-01_RW;GDL_00-01_RO;GDL_00_RO
00-Commun\02-SportSport;GG_Sport;;GDL_00-02_RW;GDL_00-02_RO;GDL_00_RO
01-RHRH;GG_RH, GG_Direction;;GDL_01_RW;GDL_01_RO;
01-RH\01-Paie;;;GDL_01-01_RW;GDL_01-01_RO;GDL_01_RO
01-RH\01-Paie\2025\Janvier01-2025;;;GDL_01-01-01_RW;GDL_01-01-01_RO;GDL_01-01_RO
01-RH\01-Paie\01-2025\Février01-Janvier;;;GDL_01-01-01-01_RW;GDL_01-01-01-01_RO;GDL_01-01-01_RO
01-RH\01-Paie\01-2025\Mars02-Février;;;GDL_01-01-01-02_RW;GDL_01-01-01-02_RO;GDL_01-01-01_RO
01-RH\01-Paie\01-2025\Avril03-Mars;;;GDL_01-01-01-03_RW;GDL_01-01-01-03_RO;GDL_01-01-01_RO
01-RH\01-Paie\01-2025\Mai04-Avril;;;GDL_01-01-01-04_RW;GDL_01-01-01-04_RO;GDL_01-01-01_RO
01-RH\01-Paie\01-2025\05-Mai;;;GDL_01-01-01-05_RW;GDL_01-01-01-05_RO;GDL_01-01-01_RO
01-RH\02-FormationFormation;;;GDL_01-02_RW;GDL_01-02_RO;GDL_01_RO
01-RH\03-CarrièreCarrière;;;GDL_01-03_RW;GDL_01-03_RO;GDL_01_RO
02-InformatiqueInformatique;GG_Informatique;Tous les utilisateurs;GDL_02_RW;GDL_02_RO;
02-Informatique\01-ProcéduresProcédures;;Tous les utilisateurs;GDL_02-01_RW;GDL_02-01_RO;GDL_02_RO
Ici, il faut que le GDL "01 - RH\01 - Paie\2025\Janvier" qui est lecture écriture donc "GDL_01-01-2025-Janvier_RW01-01_RW" soit membre de "01 - RH\01 - Paie\2025" lecture donc "GDL_01-01-202_RO01_RO", qui lui même sera membre de "GDL_01-01_RO" etc etc
De plus, il faut, au contraire que "GDL_01_RW" par exemple ai des droits récursifs sur l'ensemble des enfants, mais cela sera pour une prochaine partie.
Mise ne place de la hiérarchie
On en vient donc au script qui permet de faire çaça.
Il va simplement lire les colonnes GDL_RW, GDL_RO et Parent_GDL, ce qui lui donnes toutes les infos nécessaires :
Param(
[string]$CsvPath = "C:\chemin\Chemin\vers\GDLMapping.fichier.csv"
)
Try { Import-Module ActiveDirectory -ErrorAction Stop } Catch {}
# Import CSV avec UTF8 et séparateur ;
$GDLList = Import-Csv -Path $CsvPath -Delimiter ';' -Encoding UTF8
foreach ($gdl in $GDLList) {
$childRO = $gdl.GDLNameROGDL_RO
$childRW = $gdl.GDLNameRWGDL_RW
$parentRO = $gdl.ParentGDLROParent_GDL
# Si pas de parent, on passe à la ligne suivante
if ([string]::IsNullOrEmpty($parentRO)) { # Pas de parent, on ignore
continue }
# Vérifier que lesle groupesparent existentexiste avantdans d'ajouterAD
if (Get-ADGroup -Filter "Name -eq '$parentRO'" -ErrorAction SilentlyContinue) {
Try {
# Ajouter les enfants au parent
Add-ADGroupMember -Identity $parentRO -Members $childRO,$childRW -ErrorAction Stop
Write-Host "$childRO et $childRW ajoutés à $parentRO"
} Catch {
Write-Warning "Impossible d'ajouter $childRO/$childRW à $parentRO : $_"
}
} else {
Write-Warning "Parent ROGDL_RO '$parentROparentRO' non trouvé dans l'AD"
}
}
Avec cela, chaque enfant RO et RW est membre de son parent RO direct.
Prochaine étape appliquer les ACL aux répertoires du partage !
