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.
Script will capture out the LDAP elements and allow for flipping the array (good for hierarchical output). The script can be used from this stage to then do more other things with the LDAP elements as needed.
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' ######################################################################################## # System Variables $DN_ARRAY=@() $DN_Counter=0 ######################################################################################## write-host $AD_distinguishedName ## Split $AD_distinguishedName into $DN_ARRAY ########################################## $AD_distinguishedName | Foreach{ $DN_ARRAY=$_.split(",") } 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) } ######################################################################################## # Run through $DN_ARRAY and match elements ######################################################################################## 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