Powershell: Parse AD DistinguishedName
From Rabbi Blog
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