Active Directory : comment dupliquer plusieurs OUs ?
I. Présentation
Lorsque l'on crée une arborescence Active Directory pour plusieurs sites au sein du même domaine, il y a de fortes chances pour que l'on essaie de reproduire la même arborescence pour les différents sites afin d'avoir quelque chose d'homogène. Néanmoins, c'est plutôt pénible à faire et très chronophage... Une nouvelle fois, PowerShell va nous sauver la vie 😉
L'idée est la suivante : créer l'arborescence type pour un premier site avec toutes les unités d'organisation et sous-OU et dupliquer cette arborescence d'OU pour vos autres sites grâce à PowerShell. Le script que je vous propose aujourd'hui peut fonctionner qu'il y ait 2, 10 ou même 100 sites à gérer. La seule condition : tous les sites doivent avoir un nom différent. En quelque sorte, nous allons voir comment faire un copier-coller d'OUs.
II. Dupliquer des OUs
Dans cet exemple, je vais prendre l'arborescence de Paris comme modèle et je souhaite dupliquer cette arborescence avec deux autres noms : Caen et Rouen.
Le résultat obtenu après copier-coller de la racine Paris sera :
Voici le script avec les quatre variables à adapter :
# DC cible $DC = "SRV-ADDS-01.it-connect.local" # OU à dupliquer $OUSource = "OU=Paris,OU=Agences,DC=IT-CONNECT,DC=LOCAL" # OU dans laquelle créer les racines supplémentaires $RootNewOU = "OU=Agences,DC=IT-CONNECT,DC=LOCAL" # Liste des racines à créer $RootDestList = @("Caen","Rouen") <# SCRIPT #> # Récupérer la liste des OUs avec récursivité $GetOUStructure = Get-ADOrganizationalUnit -SearchBase $OUSource -Filter * -SearchScope Subtree -Server $DC # Récupérer le DN de l'OU Source et le nom de l'OU de plus bas niveau de ce DN $BaseDNSource = $GetOUStructure.distinguishedname[0] # Traiter chaque racine Foreach($RootDest in $RootDestList){ # Traiter chaque OU de l'arborescence Foreach($OU in $GetOUStructure){ if($OU.DistinguishedName -eq $BaseDNSource){ # Attention si le terme $RootSource se trouve plusieurs fois dans le $BaseDNSource $RootSource = (($BaseDNSource).Split(",")[0]).Split("=")[1] $BaseDNDest = $GetOUStructure.distinguishedname[0] -replace $RootSource , $RootDest # Créer la racine de la nouvelle arborescence New-ADOrganizationalUnit -Name $RootDest -Path $RootNewOU -Server $DC Write-Host -f Yellow "Création de l'OU racine '$RootDest' sous la base DN : $RootNewOU" }else{ # On crée l'OU enfant seulement si l'OU racine if(Get-ADOrganizationalUnit -Identity "OU=$RootDest,$RootNewOU" -ErrorAction SilentlyContinue -Server $DC){ $DN = $OU.distinguishedname.replace($BaseDNSource,$BaseDNDest) $ParentDN = $DN.trimstart($DN.split(',')[0]).trim(",") $OUName = $OU.name New-ADOrganizationalUnit -Name $OUName -Path $ParentDN -Server $DC Write-Host -f Cyan "Création de l'OU '$OUName' sous la base DN : $ParentDN" }else{ Write-Host -f Red "ERREUR ! La racine $RootDest n'existe pas sous : $RootNewOU" } } } }
Lorsque les variables sont adaptées, il ne vous reste plus qu'à exécuter le script et à le laisser travailler pour vous ! ?
Bonjour,
Aujourd’hui, j’ai eu un cours sur l’utilisation de l’AD. J’ai demandé à mon professeur s’il était possible de dupliquer des OUs avec leurs composants pour gagner en efficacité. Il m’a répondu que non.
Merci à vous pour avoir mis en ligne la solution à mon problème. Tout est possible, il faut juste chercher jusqu’à trouver la solution !
PS: ça va faire 5 heures que je cherche. Vous m’avez sauvée d’une nuit blanche.
Bonjour Lucie,
Je suis déçu, j’aurais préféré que tu trouves cet article beaucoup plus rapidement! 🙂
Grâce à PowerShell et un peu d’imagination, on peut en général faire ce que l’on ne peut pas faire avec l’interface graphique, la preuve avec ce cas de figure.
Bonne journée
Florian