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 B.

Consultant chez Délibérata le jour, blogueur pour IT-Connect la nuit, 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 has 2505 posts and counting.See all posts by florian

Laisser un commentaire

Votre adresse de messagerie 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.