P0werSh3ell
P0werSh3ell

Reputation: 103

REGEX - Extract OU from Distinguished Name

I need to extract "OU" part from my Distinguished Name with REGEX.

For exemple :

"CN=DAVID Jean Louis (a),OU=Coiffeur,OU=France,DC=Paris,DC=France"

"CN=PROVOST Franck,OU=Coiffeur,OU=France,DC=Paris,DC=France"

"CN=SZHARCOFF Michel (AB),OU=Coiffeur_Inter,OU=France,DC=Paris,DC=France"

I need to have

"OU=Coiffeur,OU=France"  

"OU=Coiffeur,OU=France"

"OU=Coiffeur_Inter,OU=France"

I try "CN=SZHARCOFF Michel (AB),OU=Coiffeur_Inter,OU=France,DC=Paris,DC=France" -match "^CN=[\w-()]*[\w]*" But doesn't succeed

Upvotes: 3

Views: 5319

Answers (2)

Kit
Kit

Reputation: 61

This pattern will support DistinguishedName properties containing commas, and provides named groups for matches. I use this in PowerShell to parse an ADObject's parent DN, etc.

^(?:(?<cn>CN=(?<name>.*?)),)?(?<parent>(?:(?<path>(?:CN|OU).*?),)?(?<domain>(?:DC=.*)+))$

See Regexr demo: https://regexr.com/5bt64

Upvotes: 1

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 627082

You may match all the OU= + 1 or more non-comma substrings with \bOU=[^,]+ regex and then join them with ,:

$matches = [regex]::matches($s, '\bOU=[^,]+') | % { $_.value }
$res = $matches -join ','

Output for the first string:

OU=Coiffeur,OU=France

Pattern details

  • \b - a word boundary to only match OU as a whole word
  • OU= - a literal substring
  • [^,]+ - 1 or more (+) characters other than (as [^...] is a negated character class) a comma.

See the regex demo.

Upvotes: 4

Related Questions