Création de l'arborescence
Introduction
Comme vu plus tôt dans ce chapitre, il est très long et complexe de mettre en place l'AGDLP car il faut des GDL (Groupe de Domaine Local)
C'est pourquoi j'ai mis en place une série de script, qui permet d'automatiser la création des dossiers, si on part de zéro, mais aussi la création des GDL, la parentalité des GDL, ainsi que l'application des droits sur les répertoires !
Structure et nomenclature
Commençons par définir la structure de notre arborescence dans un petit fichier texte.
Pour bien faire, on va toujours définir le chemin absolu de chaque répertoire :
0 - Commun
0 - Commun\0.1 - Scan
0 - Commun\0.2 - Sport
1 - RH
1 - RH\1.1 - Paie\1.1.1 - 2025\Janvier
1 - RH\1.1 - Paie\1.1.1 - 2025\Février
1 - RH\1.1 - Paie\1.1.1 - 2025\Mars
1 - RH\1.1 - Paie\1.1.1 - 2025\Avril
1 - RH\1.1 - Paie\1.1.1 - 2025\Mai
1 - RH\1.2 - Formation
1 - RH\1.3 - Carrière
2 - Informatique
2 - Informatique\2.1 - Procédures
Avec cette structure de fichier, et de dossier, il sera plus simple de procéder pour la suite.
Création des dossiers
La structure du fichier, avec des chemins absolus, permet de faciliter l'écriture du script.
En effet, chaque ligne représentant un chemin absolu donc chaque nom de répertoire est séparé des autres par un "\".
Il suffit alors de créer les dossiers en lisant le fichier comme cela.
# fichier modèle
$modele = "chemin\vers\structure.txt"
# destination dossiers
$partage = "chemin\vers\Partage"
# Lire en UTF-8 (compatible PowerShell 5.1)
$lignes = Get-Content -Path $modele -Encoding UTF8 | Where-Object { $_.Trim().Length -gt 0 }
foreach ($ligne in $lignes) {
# Découper le chemin sur les "\"
$parts = $ligne.Trim().Split('\')
# Nettoyer les caractères interdits
$safeParts = foreach ($p in $parts) {
$p -replace '[:*?"<>|]', '_'
}
# Créer les dossiers
$fullPath = $partage
foreach ($part in $safeParts) {
$fullPath = Join-Path $fullPath $part
if (-not (Test-Path $fullPath)) {
try {
New-Item -Path $fullPath -ItemType Directory -Force | Out-Null
Write-Host "Créé : $fullPath"
}
catch {
Write-Warning "Erreur création de $fullPath : $_"
}
}
else {
Write-Host "Existe déjà : $fullPath"
}
}
}
Avec cela, nous avons une arborescence toute neuve et propre (presque, celle-ci n'est évidemment la que pour le test)