Récupérer l’OU d’un objet AD via parsing
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

Clap
Comments