Gérer les OUs et déplacer leurs objets avec PowerShell

Une unité organisationnelle (OU) est un conteneur dans Active Directory où les utilisateurs, les groupes et les ordinateurs, ainsi que d’autres OUs, peuvent être stockés. Chaque domaine AD peut avoir sa propre hiérarchie d’unités organisationnelles.

Dans cet article, vous apprendrez la gestion des OUs et l’utilisation des scripts PowerShell pour :

PowerShell ISE est le meilleur outil pour travailler avec les scripts PowerShell. Lancez l’outil PowerShell ISE avec les privilèges d’administrateur en appuyant sur « Windows+R » et en entrant « runas /profile /user:Administrator PowerShell_ISE » dans la fenêtre Run. Saisissez le mot de passe de l’administrateur lorsque vous y êtes invité. Vous pouvez également cliquer avec le bouton droit de la souris sur l’icône PowerShell ISE et choisir l’option « Exécuter en tant qu’administrateur ».

Pour travailler avec AD et ses objets, vous devez importer le module Active Directory pour Windows PowerShell. Dans Microsoft Windows Server 2008 R2, vous devez activer ce module en exécutant la commande suivante :

Import-Module ActiveDirectory

Dans Microsoft Windows Server 2012 et les versions ultérieures, ce module est activé par défaut.

Créer des OUs dans un domaine Active Directory avec PowerShell

Vous pouvez créer une nouvelle unité structurelle dans Active Directory en utilisant le cmdlet New-ADOrganizationalUnit et en spécifiant le nom d’un nouvel objet OU Par défaut, PowerShell créera l’OU dans la racine du domaine. La commande ci-dessous va créer une OU nommé « Régions » sur le DC :

New-ADOrganizationalUnit “Regions”

Si vous avez besoin d’un chemin d’accès OU LDAP différent, spécifiez son nom distinctif en utilisant le paramètre -Path cmdlet :

New-ADOrganizationalUnit “Regions” –Path “OU=Managers,DC=Enterprise,DC=com”

Déplacer une OU vers une autre adresse LDAP

Si vous avez besoin de déplacer une OU vers une autre adresse, utilisez Move-ADObject cmdlet. Veuillez noter que l’OU « cible » ne doit pas être protégée de la suppression accidentelle. Si c’est le cas, utilisez la commande suivante pour enlever la protection :

Set-ADOrganizationalUnit -Identity "OU=Regions,OU=Managers,DC=Enterprise,DC=Com" -ProtectedFromAccidentalDeletion $False

Maintenant, vous pouvez déplacer une OU vers une autre adresse :

Move-ADObject -Identity "OU=Regions,OU=Managers,DC=Enterprise,DC=Com" -TargetPath "OU=IT,DC=Enterprise,DC=Com"

Renommer une OU

Pour renommer une unité structurelle, utilisez le cmdlet Rename-ADObject. Le paramètre -Identity spécifie l’objet Active Directory à renommer et nécessite son nom distinctif (DN) ou GUID.

Cette commande renomme l’OU « Régions » en « Districts » :

Rename-ADObject -Identity "OU=Regions,OU=IT,DC=enterprise,DC=COM" -NewName Districts

Vous pouvez aussi utiliser le cmdlet Get-ADOrganizationalUnit avec le paramètre -Filter ; il ne nécessite pas le chemin LDAP complet vers l’OU. Cependant, ce cmdlet recherchera dans la totalité d’AD et l’action sera appliquée à tous les OUs qui contiennent le terme de recherche dans leur nom :

Get-ADOrganizationalUnit -Filter "Name -eq 'Regions'" | Rename-ADObject -NewName Countries

Appliquer une politique de groupe à une OU

Pour affecter une stratégie de groupe à une OU, utilisez le cmdlet New-GPLink, qui établit un lien entre l’objet de stratégie de groupe spécifié (GPO) et l’OU. Vous pouvez spécifier n’importe laquelle des propriétés suivantes pour le lien :

  • Activé – Si le lien est activé, les paramètres du GPO sont appliqués lorsque la stratégie de groupe est traitée pour le site, le domaine ou l’OU.
  • Renforcé – Si le lien est appliqué, il ne peut pas être bloqué à un conteneur de niveau inférieur.
  • Ordre – L’ordre spécifie la priorité des paramètres GPO.

La commande suivante relie le GPO « Block Software » aux « Districts » OU avec le lien à la fois activé et renforcé :

New-GPLink -Name "Block Software" -Target "OU=Districts,OU=IT,dc=enterprise,dc=com" -LinkEnabled Yes -Enforced Yes

Déplacer les ordinateurs et les utilisateurs vers une nouvelle OU

Une fois que vous avez créé une OU et éventuellement liée à une GPO, il est temps de la remplir d’utilisateurs et d’ordinateurs. Le cmdlet PowerShell Move-ADObject déplace tout objet ou ensemble d’objets (tel qu’un utilisateur, un ordinateur, un groupe ou une autre OU) vers une autre OU. Le paramètre – « Identity » spécifie quel objet ou conteneur d’Active Directory doit être déplacé. Notez que vous devez entrer le chemin LDAP ou SID complet de l’objet ; vous ne pouvez pas utiliser son SamAccountName. L’exemple ci-dessous montre comment déplacer un utilisateur (John Brown) vers l’OU « Districts » :

Move-ADObject -Identity "CN=John Brown,CN=Users,DC=enterprise,DC=com" -TargetPath "OU=Districts,OU=IT,DC=Enterprise,DC=Com"

Utilisez la même syntaxe pour déplacer les objets informatiques. La commande suivante déplacera l’ordinateur « R07GF » vers le conteneur « Computers » :

Move-ADObject -Identity "CN=R07GF,OU=CEO,DC=enterprise,DC=com" -TargetPath "CN=Computers,DC=Enterprise,DC=Com

Déplacer les ordinateurs et les utilisateurs AD vers une autre OU à l’aide d’un fichier CSV ou TXT

Si vous avez une liste prédéfinie d’objets à déplacer, vous pouvez l’enregistrer en tant que fichier CSV et ensuite importer ce fichier dans Active Directory. La liste CSV doit être dans le format suivant :

Utilisez le script PowerShell suivant pour déplacer les comptes d’utilisateurs AD listés dans un fichier CSV :

# Specify target OU. This is where users will be moved.
$TargetOU =  "OU=Districts,OU=IT,DC=enterprise,DC=com"
# Specify CSV path. Import CSV file and assign it to a variable. 
$Imported_csv = Import-Csv -Path "C:\temp\MoveList.csv" 

$Imported_csv | ForEach-Object {
     # Retrieve DN of user.
     $UserDN  = (Get-ADUser -Identity $_.Name).distinguishedName
     # Move user to target OU.
     Move-ADObject  -Identity $UserDN  -TargetPath $TargetOU
   
 }

Pour déplacer des comptes d’ordinateurs AD listés dans un fichier texte, utilisez ce script PowerShell :

# Specify path to the text file with the computer account names.
$computers = Get-Content C:\Temp\Computers.txt

# Specify the path to the OU where computers will be moved.
$TargetOU   =  "OU=Districts,OU=IT,DC=enterprise,DC=com" 
ForEach( $computer in $computers){
    Get-ADComputer $computer |
    Move-ADObject -TargetPath $TargetOU

}

Supprimer une OU d’AD

Le cmdlet Remove-ADOrganizationalUnit supprime une OU. L’OU ne doit pas être protégée contre la suppression accidentelle. Vous pouvez supprimer l’option de suppression accidentelle pour chaque OU qui contient « Continents » dans son nom en utilisant les cmdlets Get-ADOrganizationalUnit et Set-ADOrganizationalUnit comme suit :

Get-ADOrganizationalUnit -filter "Name -eq 'Continents'" | Set-ADOrganizationalUnit  -ProtectedFromAccidentalDeletion $False

Pour supprimer d’AD toutes les OUs contenant le mot « Continents » dans leurs noms, utilisez la commande suivante :

Get-ADOrganizationalUnit -filter "Name -eq 'Continents'" | Remove-ADOrganizationalUnit –Recursive

Il vous sera demandé de confirmer la suppression :

Notez que le paramètre – « Recursive » supprime à la fois l’UO et tous les objets qui en découlent. Ces objets seront supprimés même si la protection contre la suppression est activée pour eux.

Conclusion

Maintenant que vous avez appris à gérer les OUs dans Active Directory à l’aide des scripts PowerShell, vous pouvez automatiser une variété d’opérations simples liées à la gestion des OUs. Avant d’essayer ces commandes, assurez-vous d’activer la fonction « Active Directory Recycle Bin » afin de pouvoir facilement annuler les suppressions erronées. Il est également judicieux de suivre attentivement tous les changements apportés à vos unités organisationnelles. Voici quelques conseils pratiques qui vous aideront: