Création des GDL
Introduction
On le redit encore, mais le plus long pour l'AGDLP, c'est la mise en place, d'abord des dossiers, et ensuite des groupes GDL, ce que nous allons voir maintenant !
Reprenons notre fichier modèle :
| FolderPath | GG_RW | GG_RO |
| 00-Commun | Tous les utilisateurs | |
| 00-Commun\01-Scan | Tous les utilisateurs | |
| 00-Commun\02-Sport | GG_Sport | |
| 01-RH | GG_RH, GG_Direction | |
| 01-RH\01-Paie\2025\Janvier | ||
| 01-RH\01-Paie\2025\Février | ||
| 01-RH\01-Paie\2025\Mars | ||
| 01-RH\01-Paie\2025\Avril | ||
| 01-RH\01-Paie\2025\Mai | ||
| 01-RH\02-Formation | ||
| 01-RH\03-Carrière | ||
| 02-Informatique | GG_Informatique | Tous les utilisateurs |
| 02-Informatique\01-Procédures | Tous les utilisateurs | |
Et en vue CSV :
FolderPath;GG_RW;GG_RO
00-Commun;;Tous les utilisateurs
00-Commun\01-Scan;Tous les utilisateurs;
00-Commun\02-Sport;GG_Sport;
01-RH;GG_RH, GG_Direction;
01-RH\01-Paie\01-2025\01-Janvier;;
01-RH\01-Paie\01-2025\02-Février;;
01-RH\01-Paie\01-2025\03-Mars;;
01-RH\01-Paie\01-2025\04-Avril;;
01-RH\01-Paie\01-2025\05-Mai;;
01-RH\02-Formation;;
01-RH\03-Carrière;;
02-Informatique;GG_Informatique;Tous les utilisateurs
02-Informatique\01-Procédures;;Tous les utilisateurs
Pour bien faire, il faut créer deux GDL par répertoire, un lecture seule, et un lecture/écriture.
C'est donc ce qu'on va faire, automatiquement, suivant ce nommage : GDL_<numérotation-répertoire>_RO et GDL_<numérotation-répertoire>_RW.
De plus, nous allons préparer la parentalité des GDL, c'est à dire que chaque enfant GDL soit membre de son parent RO direct, et nous allons également les disposer dans un miroir de l'arborescence dans l'AD.
Cela permet une gestion plus simple car, si nous voulons ajouter des droits sur un dossier N-15 sous dossiers, il est plus simple de naviguer directement dans l'arborescence miroir de l'AD et ainsi ajouté le bon GG à la GDL finale.
Grâce à la parentalité, les droits seront automatiquement les bons.
OU et GDL
Voici donc le script qui nous permet de faire tout cela :
Param(
[string]$CsvPath = "C:\Chemin\vers\fichier.csv",
[string]$BaseOU = "OU=GDL,OU=AGDLP,DC=domain,DC=local"
)
Try { Import-Module ActiveDirectory -ErrorAction Stop } Catch {}
$FolderToGDL = @{}
Function Create-OU($ouName, $parentDN) {
$ouDN = "OU=$ouName,$parentDN"
if (-not (Get-ADOrganizationalUnit -Filter "DistinguishedName -eq '$ouDN'" -ErrorAction SilentlyContinue)) {
New-ADOrganizationalUnit -Name $ouName -Path $parentDN -ProtectedFromAccidentalDeletion $false
Write-Host "OU créée : $ouDN"
}
return $ouDN
}
Function Create-GDL($GroupName, $OU) {
if (-not (Get-ADGroup -Filter "Name -eq '$GroupName'" -ErrorAction SilentlyContinue)) {
New-ADGroup -Name $GroupName -GroupScope Global -Path $OU
Write-Host "GDL créé : $GroupName dans $OU"
}
}
# Importer le CSV existant
if (Test-Path $CsvPath) {
$GDLList = Import-Csv -Path $CsvPath -Delimiter ';' -Encoding UTF8
} else {
Write-Error "Le fichier CSV $CsvPath n'existe pas."
exit
}
foreach ($row in $GDLList) {
$folderPath = $row.FolderPath.Trim()
if ($folderPath -eq "") { continue }
# Extraire uniquement les numéros pour le GDL
$numbers = ($folderPath -split '\\' | ForEach-Object {
if ($_ -match '^\d+') { $Matches[0] }
}) -join '-'
$GDL_RW = "GDL_$numbers`_RW"
$GDL_RO = "GDL_$numbers`_RO"
# Création des OU correspondantes
$parts = $folderPath -split '\\'
$parentDN = $BaseOU
foreach ($part in $parts) {
$ouDN = Create-OU $part $parentDN
$parentDN = $ouDN
}
# Calculer le parent GDL pour Parent_GDL
$parentFolder = Split-Path $folderPath -Parent
if ($parentFolder -and $FolderToGDL.ContainsKey($parentFolder)) {
$parentGDL = $FolderToGDL[$parentFolder]
} else {
$parentGDL = $null
}
$FolderToGDL[$folderPath] = $GDL_RO
# Créer les GDL dans l’OU correspondante
Create-GDL $GDL_RW $ouDN
Create-GDL $GDL_RO $ouDN
# Ajouter les nouvelles colonnes au CSV avec Add-Member
$row | Add-Member -MemberType NoteProperty -Name GDL_RW -Value $GDL_RW -Force
$row | Add-Member -MemberType NoteProperty -Name GDL_RO -Value $GDL_RO -Force
$row | Add-Member -MemberType NoteProperty -Name Parent_GDL -Value $parentGDL -Force
}
# Exporter le CSV mis à jour
$GDLList | Export-Csv -Path $CsvPath -Delimiter ';' -NoTypeInformation -Encoding UTF8
Write-Host "CSV mis à jour avec GDL : $CsvPath"
Le tableau CSV qui en ressort devrait ressembler à ça :
| 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\01-Janvier | GDL_01-01-01_RW | GDL_01-01-01_RO | GDL_01-01_RO | ||
| 01-RH\01-Paie\01-2025\02-Février | GDL_01-01-02_RW | GDL_01-01-02_RO | GDL_01-01_RO | ||
| 01-RH\01-Paie\01-2025\03-Mars | GDL_01-01-03_RW | GDL_01-01-03_RO | GDL_01-01_RO | ||
| 01-RH\01-Paie\01-2025\04-Avril | GDL_01-01-04_RW | GDL_01-01-04_RO | GDL_01-01_RO | ||
| 01-RH\01-Paie\01-2025\05-Mai | GDL_01-01-05_RW | GDL_01-01-05_RO | GDL_01-01_RO | ||
| 01-RH\02-Formation | GDL_01-01-01_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 |
Et en version CSV :
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\01-Janvier;;;GDL_01-01-01_RW;GDL_01-01-01_RO;GDL_01-01_RO
01-RH\01-Paie\01-2025\02-Février;;;GDL_01-01-02_RW;GDL_01-01-02_RO;GDL_01-01_RO
01-RH\01-Paie\01-2025\03-Mars;;;GDL_01-01-03_RW;GDL_01-01-03_RO;GDL_01-01_RO
01-RH\01-Paie\01-2025\04-Avril;;;GDL_01-01-04_RW;GDL_01-01-04_RO;GDL_01-01_RO
01-RH\01-Paie\01-2025\05-Mai;;;GDL_01-01-05_RW;GDL_01-01-05_RO;GDL_01-01_RO
01-RH\02-Formation;;;GDL_01-01-01_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
Bien ! A présent nous avons des groupes bien nommés dans des OU bien classées.
Nous allons passer à la mise en place de la hiérarchie des groupes !