Actions

Powershell: Parse AD DistinguishedName

From Rabbi Blog

The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Purpose

Using Powershell, break down the elements of the AD DistinguisedName value return. Ideally, use this has a launching point to handle CN, OU, DC, etc values from the resulting array.

Background

At first I wanted to do this via regex however at my level of knowledge it seemed to be a higher hurdle to break down the variable length input DN string. Luckily I realized that it's a comma separated value and it is nicely split by commas.

Code



########################################################################################
# User Variables
########################################################################################
$DN_ARRAY_FLIP=1;   #Set to 1 to flip $DN_ARRAY before parsing
########################################################################################

$AD_distinguishedName = 'CN=Some B. User,OU=Accounting,OU=Part Time,OU=Staff,OU=Users,DC=Rabbibob,DC=com'
write-host $AD_distinguishedName
$DN_array=@()

$AD_distinguishedName | Foreach{
    $DN_array=$_.split(",")
}

$DN_Counter=0
write-host "Size of Array:" $DN_array.Length "Flip Bit: $DN_ARRAY_FLIP" 

########################################################################################
# Check to see if the array should be flipped ($DN_ARRAY_FLIP)
########################################################################################
if ($DN_ARRAY_FLIP -eq 1){
    [array]::Reverse($DN_array)
    #Flipping the Array (for report from a heirarchy perspective)
    }

    foreach($DN_array_value in $DN_array)
{
    $DN_Counter++

    if ($DN_array_value -match '(CN=)(.*)') { 
        write-host "Matched CN at Position" $DN_Counter":" $Matches[2]         }
        elseif ($DN_array_value -match '(DC=)(.*)') { 
            write-host "Matched DC at Position" $DN_Counter":" $Matches[2] }
            elseif ($DN_array_value -match '(OU=)(.*)') { 
                write-host "Matched OU at Position" $DN_Counter":" $Matches[2]}
                    else {
                        write-host "Unmatched Item: $DN_array_value "
                    }

}


Output

CN=Some B. User,OU=Accounting,OU=Part Time,OU=Staff,OU=Users,DC=Rabbibob,DC=com
Size of Array: 7 Flip Bit: 1
Matched DC at Position 1: com
Matched DC at Position 2: Rabbibob
Matched OU at Position 3: Users
Matched OU at Position 4: Staff
Matched OU at Position 5: Part Time
Matched OU at Position 6: Accounting
Matched CN at Position 7: Some B. User