Photo by Jens Lelie / Unsplash
Récupérer l’OU parente d’un objet

Récupérer l’OU parente d’un objet

Published on 13 May 2025

Bastien Perez
Bastien Perez

Clap

Récupérer l’OU d’un objet AD via parsing

💡
Le parsing consiste à analyser et découper des données ou une chaîne de caractères pour en extraire certaines informations, par exemple à l’aide de fonctions ou d’expressions régulières. C’est souvent utilisé quand on veut récupérer une partie précise d’un texte.

Dans Active Directory, il est fréquent de vouloir connaître l’unité d’organisation (OU) d’un objet (utilisateur, ordinateur, groupe).
L’approche classique consiste à parser le DistinguishedName à l’aide d'expressions régulières (regex)

Voici un exemple de parsing pour un objet AD en oneliner :

($user = Get-ADUser -Identity bastien -Properties CN).DistinguishedName -replace [regex]::Escape("CN=$($user.CN),"), ''

Dans Active Directory, il est fréquent de vouloir connaître l’unité d’organisation (OU) d’un objet (utilisateur, ordinateur, groupe). L’approche classique consiste à parser le DistinguishedName à l’aide d'expression régulière (regex)… ce qui peut être complexe.

Un exemple de parsing pour un objet AD:

$ouPath = ($user = Get-ADUser -Identity bastien -Properties CN).DistinguishedName -replace [regex]::Escape("CN=$($user.CN),"), ''

# Output the OU path
$ouPath

Résultat:

OU=Users,OU=_Company,DC=itprotips,DC=local

Cette méthode fonctionne, mais elle reste fragile et peu compréhensible pour un non initié. Elle dépend du format exact du DN, peut échouer avec des noms complexes.

L’attribut msDS-parentdistname

L’attribut msDS-parentdistname est un attribut calculé (constructed) qui contient directement l’OU ou le conteneur parent d’un objet Active Directory.

Il est donc possible de récupérer proprement l’OU d’un utilisateur sans manipuler de chaînes de caractères.

Exemple PowerShell

Get-ADUser bastien -Properties msDS-parentdistname | Format-List Name, DistinguishedName, 'msDS-parentdistname'

Résultat :

Name                : bastien
DistinguishedName   : CN=bastien,OU=Users,OU=_Company,DC=itprotips,DC=local
msDS-parentdistname : OU=Users,OU=_Company,DC=itprotips,DC=local

Vous pouvez aussi l'utiliser pour plusieurs objets et n'importe quel type d'objet

Get-ADUser -Filter * -Properties msDS-parentdistname | Select-Object SamAccountName, 'msDS-parentdistname'
Get-ADComputer -Filter * -Properties msDS-parentdistname | Select-Object SamAccountName, 'msDS-ParentDistName'
Get-ADObject -Filter * -Properties msDS-parentdistname | Select-Object SamAccountName, 'msDS-ParentDistName'
Get-ADObject -Filter * -Properties msDS-parentdistname | Select-Object SamAccountName, 'msDS-ParentDistName'
Get-ADOrganizationalUnit -Filter * -Properties msDS-parentdistname | Select-Object SamAccountName, 'msDS-ParentDistName'

Avantages par rapport au parsing du DN

  • Fiabilité : évite les erreurs liées à des DN malformés ou à des OU contenant des virgules.
  • Lisibilité : plus clair dans un script.
  • Performance : évite les opérations de parsing inutiles.

Limitations

  • L’attribut msDS-parentdistname est un attribut calculé : il n’est disponible que sur les contrôleurs de domaine Windows Server 2012 R2 et supérieurs.
  • Ce n'est pas un attribut répliqué, il est calculé directement au niveau du DC.

Description de l'attribut au niveau du schéma

cn: ms-DS-Parent-Dist-Name
lDAPDisplayName: msDS-parentdistname
attributeID: 1.2.840.113556.1.4.2203
attributeSyntax: 2.5.5.1
omSyntax: 127
omObjectClass: 1.3.12.2.1011.28.0.714
isSingleValued: TRUE
schemaIdGuid: b918fe7d-971a-f404-9e21-9261abec970b
systemOnly: TRUE
searchFlags: 0
systemFlags: FLAG_ATTR_NOT_REPLICATED | FLAG_ATTR_IS_CONSTRUCTED | 
 FLAG_ATTR_IS_OPERATIONAL | FLAG_SCHEMA_BASE_OBJECT
showInAdvancedViewOnly: TRUE
[MS-ADLS]: Attribute msDS-parentdistname
This attribute specifies the distinguished name (DN) of the parent object of the current object. cn:

Comments

banner-Bastien Perez
Bastien Perez

Freelance Microsoft 365 - Active Directory - Modern Workplace

France