Création des GDL
Import-Module ActiveDirectory
# Racine des dossiers
$SourcePath = "chemin\vers\Partage"
# OU racine pour créer les OUs
$OUracine = "OU=AGDLP,DC=domain,DC=local"
# Fonction qui crée récursivement les OU d'après le chemin
function Get-OrCreateOU {
param(
[string[]]$OUlist,
[string]$OUbase
)
$currentPath = $OUbase
foreach ($ou in $OUlist) {
$currentPath = "OU=$ou,$currentPath"
if (-not (Get-ADOrganizationalUnit -Filter "Name -eq '$ou'" -SearchBase $currentPath.Substring($currentPath.IndexOf(",")+1) -ErrorAction SilentlyContinue)) {
New-ADOrganizationalUnit -Name $ou -Path $currentPath.Substring($currentPath.IndexOf(",")+1)
Write-Host "OU créée : $ou sous $currentPath"
}
}
return $currentPath
}
# Parcours récursif des dossiers
Get-ChildItem -Path $SourcePath -Recurse -Directory | ForEach-Object {
$fullPath = $_.FullName.Substring($SourcePath.Length).Trim("\")
$parts = $fullPath -split "\\" # découpe en dossiers
if ($parts.Count -gt 0) {
# Pour les groupes : garder uniquement le premier mot de chaque dossier
$tokens = @()
foreach ($p in $parts) {
$tokens += ($p -split " ")[0]
}
$nomBase = "GDL_" + ($tokens -join "-")
$groupRO = "${nomBase}_RO"
$groupRW = "${nomBase}_RW"
# Pour les OU : garder le nom complet de chaque dossier
$ouPath = Get-OrCreateOU -OUlist $parts -OUbase $OUracine
# Créer les groupes s’ils n’existent pas
foreach ($grp in @($groupRO, $groupRW)) {
if (-not (Get-ADGroup -Filter "Name -eq '$grp'" -SearchBase $ouPath -ErrorAction SilentlyContinue)) {
New-ADGroup -Name $grp -SamAccountName $grp -GroupScope Global -GroupCategory Security -Path $ouPath
Write-Host "Groupe créé : $grp dans $ouPath"
}
}
}
}