Después de buscar en el código fuente .NET parece que hay una clase de utilidad interna que puede parse Distinguished Names en sus diferentes componentes. Por desgracia, la clase de utilidad no es pública, pero se puede acceder a él mediante la reflexión:
string dn = "CN=TestGroup,OU=Groups,OU=UT-SLC,OU=US,DC=Company,DC=com";
Assembly dirsvc = Assembly.Load("System.DirectoryServices");
Type asmType = dirsvc.GetType("System.DirectoryServices.ActiveDirectory.Utils");
MethodInfo mi = asmType.GetMethod("GetDNComponents", BindingFlags.NonPublic | BindingFlags.Static);
string[] parameters = { dn };
var test = mi.Invoke(null, parameters);
//test.Dump("test1");//shows details when using Linqpad
//Convert Distinguished Name (DN) to Relative Distinguished Names (RDN)
MethodInfo mi2 = asmType.GetMethod("GetRdnFromDN", BindingFlags.NonPublic | BindingFlags.Static);
var test2 = mi2.Invoke(null, parameters);
//test2.Dump("test2");//shows details when using Linqpad
Los resultados se vería así:
//test1 is array of internal "Component" struct that has name/values as strings
Name Value
CN TestGroup
OU Groups
OU UT-SLC
OU US
DC company
DC com
//test2 is a string with CN=RDN
CN=TestGroup
Por favor, no esto es una clase de utilidad interior y podrían cambiar en una versión futura.
Es posible que desee agregar LDAP a la lista de etiquetas de su pregunta. Además, busque SO para [LDAP C#]. Puede haber una pregunta relacionada. –
Gracias @Jim Mischel – FunLovinCoder
Consulte https://pscx.codeplex.com/SourceControl/latest#Trunk/Src/Pscx.UnitTests/DirectoryServices/DirectoryServicesTest.cs para ver el código utilizado en las extensiones de la comunidad Powershell –