Hiérarchie des GDL
Introduction
Nous reprenons une nouvelle fois notre fichier CSV :
NIVEAU 1;NIVEAU 2;NIVEAU 3;NIVEAU 4;NIVEAU 5;NIVEAU 6;NIVEAU 7;NIVEAU 8;FolderPath;GG_RW;GG_RO;GDL_RW;GDL_RO;CREER_GROUPES;GG_ECRITURE;GG_LECTURE;GDL_ECRITURE;GDL_LECTURE;GDL_VUE;Parent_GDL
00-Commun;01-DIRECTION;;Tous;;;;;;01-DIRECTION;;ORG_GG_DIRECTION;;GDL_01_ECRITURE;GDL_01_LECTURE;GDL_01_VUE;
les02-FINANCE;;;;;;;;02-FINANCE;;ORG_GG_FINANCE;ORG_GG_DIRECTION;GDL_02_ECRITURE;GDL_02_LECTURE;GDL_02_VUE;
utilisateurs;GDL_00_RW;GDL_00_RO;02-FINANCE;01-BUDGET;;;;;;;02-FINANCE\01-BUDGET;;ORG_GG_FINANCE;ORG_GG_DIRECTION;GDL_02-01_ECRITURE;GDL_02-01_LECTURE;GDL_02-01_VUE;GDL_02_VUE
00-Commun\02-FINANCE;02-FACTURES;;;;;;;02-FINANCE\02-FACTURES;;ORG_GG_FINANCE;ORG_GG_DIRECTION;GDL_02-02_ECRITURE;GDL_02-02_LECTURE;GDL_02-02_VUE;GDL_02_VUE
03-RH;;;;;;;;03-RH;;ORG_GG_RH;ORG_GG_DIRECTION;GDL_03_ECRITURE;GDL_03_LECTURE;GDL_03_VUE;
03-RH;01-Scan;Tous les utilisateurs;CONTRATS;;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-;;;03-RH\01-Paie;CONTRATS;;ORG_GG_RH;ORG_GG_DIRECTION;GDL_03-01_ECRITURE;GDL_03-01_LECTURE;GDL_03-01_VUE;GDL_03_VUE
03-RH;02-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;03-RH;NON;;;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;IT;;;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;04-IT;;ORG_GG_IT;ORG_GG_DIRECTION;GDL_04_ECRITURE;GDL_04_LECTURE;GDL_04_VUE;
04-IT;01-RH\03-Carrière;INFRA;;;GDL_01-03_RW;GDL_01-03_RO;GDL_01_RO;;;;04-IT\01-INFRA;;ORG_GG_IT;ORG_GG_DIRECTION;GDL_04-01_ECRITURE;GDL_04-01_LECTURE;GDL_04-01_VUE;GDL_04_VUE
04-IT;02-Informatique;GG_Informatique;TousPROJETS;;;;;;;04-IT\02-PROJETS;;ORG_GG_IT;ORG_GG_DIRECTION;GDL_04-02_ECRITURE;GDL_04-02_LECTURE;GDL_04-02_VUE;GDL_04_VUE
les utilisateurs;GDL_02_RW;GDL_02_RO;
04-IT;02-Informatique\01-Procédures;PROJETS;2026;;Tous les utilisateurs;GDL_02-01_RW;GDL_02-01_RO;GDL_02_RO;;;;04-IT\02-PROJETS\2026;NON;;;;;;
Ici, il faut que le GDL "01 - RH\01 - Paie\2025\Janvier"04-IT\02-PROJETS" qui est lecture ou écriture donc "GDL_01-01-01-01_RWGDL_04-02_ECRITURE" soitou "GDL_04-02_LECTURE soient membre de "0104-IT" - RH\01 - Paie\2025" lecturevue donc "GDL_01-01-01_RO", qui lui même sera membre de "GDL_01-01_ROGDL_04_VUE" etc etc
De plus, il faut, au contraire que "GDL_01_RWGDL_01_ECRITURE"ou "GDL_04-02_LECTURE" par exemple aiaient 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.
Il va simplement lire les colonnes GDL_RW,GDL_ECRITURE, GDL_ROGDL_LECTURE, GDL_VUE et Parent_GDL, ce qui lui donnes toutes les infos nécessaires :
<#
===============================================================================
SCRIPT : 3.1 - Creation_Parentalite.ps1
OBJET : Chainer les GDL de chaque dossier vers le GDL_VUE de leur parent
===============================================================================
DESCRIPTION :
- Pour chaque ligne du CSV :
* Si Parent_GDL est renseigne :
- Ajouter GDL_ECRITURE -> Parent_GDL
- Ajouter GDL_LECTURE -> Parent_GDL
- Ajouter GDL_VUE -> Parent_GDL
- Tous les messages visibles sont sans accents.
- Commentaires en francais pour clarifier chaque etape.
NOTE :
- Ce script n effectue PAS de creation de groupes.
Il se contente de realiser le chainage entre niveaux.
- Fonctionne sur les noms de groupes crees dans le script 2.1.
===============================================================================
#>
Param(
[string]$CsvPath = "C:\Chemin\vers\fichier.AGDLP\ORG_ARBO_GDL.csv"
)
Try$ErrorActionPreference = "Stop"
# ----------------------------------------------------------------------------
# Module ActiveDirectory
# ----------------------------------------------------------------------------
try {
Import-Module ActiveDirectory -ErrorAction Stop
}
Catchcatch {
Write-Error "Module ActiveDirectory introuvable. Installer RSAT AD PowerShell."
exit 1
}
# Import----------------------------------------------------------------------------
# Lecture du CSV
avec# UTF8----------------------------------------------------------------------------
etif séparateur(-not ;(Test-Path $GDLListCsvPath)) {
Write-Error "CSV introuvable : $CsvPath"
exit 1
}
$rows = Import-Csv -Path $CsvPath -Delimiter '";'" -Encoding UTF8
$total = $rows.Count
$index = 0
Write-Host "Application de la parentalite GDL a partir du fichier : $CsvPath"
Write-Host ""
# ----------------------------------------------------------------------------
# Boucle principale
# ----------------------------------------------------------------------------
foreach ($gdlrow in $GDLList)rows) {
$childROindex++
# Mettre a jour la progression
Write-Progress -Activity "Chainage GDL enfant -> Parent_GDL" `
-Status "$index / $total" `
-PercentComplete (($index/$total)*100)
# Recuperation du parent
$parent = $gdl.GDL_RO
$childRW = $gdl.GDL_RW
$parentRO = $gdl.row.Parent_GDL
# Si pas de parent, on passe à la ligne suivante
if ([string]::IsNullOrEmpty(IsNullOrWhiteSpace($parentRO)parent)) {
# Aucun parent pour cette ligne
continue
}
# VérifierVerifier que le parent existe dans l AD
if$parentGroup (= Get-ADGroup -Filter "Name -eq '$parentRO'parent'" -ErrorAction SilentlyContinue)SilentlyContinue
if (-not $parentGroup) {
TryWrite-Warning "Parent GDL introuvable dans AD : $parent"
continue
}
# Groupes enfants a chainer
$childGroups = @()
if ($row.GDL_ECRITURE -and $row.GDL_ECRITURE.Trim() -ne "") {
$childGroups += $row.GDL_ECRITURE.Trim()
}
if ($row.GDL_LECTURE -and $row.GDL_LECTURE.Trim() -ne "") {
$childGroups += $row.GDL_LECTURE.Trim()
}
if ($row.GDL_VUE -and $row.GDL_VUE.Trim() -ne "") {
$childGroups += $row.GDL_VUE.Trim()
}
# Ajouter les groupes enfants audans le groupe parent
foreach ($cg in $childGroups) {
$exists = Get-ADGroup -Filter "Name -eq '$cg'" -ErrorAction SilentlyContinue
if (-not $exists) {
Write-Warning "GDL enfant introuvable : $cg"
continue
}
try {
Add-ADGroupMember -Identity $parentROparent -Members $childRO,$childRWcg -ErrorAction Stop
Write-Host "$childROChaine et: $childRWcg ajoutés à-> $parentRO"parent"
}
Catchcatch {
Write-Warning "ImpossibleErreur d'ajouter $childRO/$childRW à $parentROchainage : $_"cg -> $parent ($_ )"
}
}
else}
{# Effacer la barre de progression
Write-WarningProgress -Activity "ParentChainage GDL_ROGDL '$parentRO'enfant non-> trouvéParent_GDL" dans-Completed
l'AD"Write-Host }""
}Write-Host "Chainage parental GDL termine." -ForegroundColor Green
Avec cela, chaque enfant ROVUE, LECTURE et RWECRITURE est membre de son parent ROVUE direct.
Prochaine étape appliquer les ACL aux répertoires du partage !

