Skip to main content

Création des GDL

agdlp.png

 

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"
            }
        }
    }
}