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 ! ?

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian Burnel

Ingénieur système et réseau et cofondateur d'IT-Connect. Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

florian a publié 3128 articlesVoir toutes les publications de cet auteur

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

 

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.