如何从LDAP路径字符串中提取项目

时间:2016-04-15 09:23:52

标签: c# string split active-directory ldap

是否有"权利"从以下字符串中检索CN的方法:

"LDAP://CN=Firstname Surname,OU=Domain Administrators,DC=DOMAIN1,DC=co,DC=uk"

我从DirectorySearcher

中检索到的

目前我这样做:

var name = result.Path.Split('=')[1].Split(',')[0];

但这并不是最好的方法 - 有没有人知道任何替代方案?

2 个答案:

答案 0 :(得分:2)

您可以查看以下文章:An RFC 2253 Compliant Distinguished Name Parser

  

此代码中有三个主要类:

     
      
  • DN,代表完整的专有名称
  •   
  • RDN,代表相对可分辨名称
  •   
  • RDNComponent,代表多值RDN的各个组件

         

    DN myDN = new DN(@"CN=Pete Everett\, esq.,OU=People,DC=example,DC=com");

  •   
     

要打印出DN对象,请使用其ToString()方法,就像您一样   期望的。

Console.WriteLine(myDN.ToString());
// prints out:
// CN=Pete Everett\, esq.,OU=People,DC=example,DC=com
     

但是如果您想要更好地控制格式,可以指定   要逃避的字符类别。

Console.WriteLine(myDN.ToString(EscapeChars.None));
// prints out:
// CN=Pete Everett, esq.,OU=People,DC=example,DC=com
// (Note that this is an incorrect DN format, and will not parse correctly.)
     

要获取给定DN对象的父对象,可以使用其父对象   属性。

DN myParentDN = myDN.Parent;
Console.WriteLine(myParentDN.ToString());
// prints out:
// OU=People,DC=example,DC=com

答案 1 :(得分:1)

您可以使用模式匹配的功能来完成此任务,而不必依赖外部依赖项。

这是regular expression to extract info from ldap distinguishedNames用户{strong> Massimo Bonvicini

RegExr.com

这是C#中的一个基本示例

using System.Text.RegularExpressions;

string pattern = "^(?:(?<cn>CN=(?<name>[^,]*)),)?(?:(?<path>(?:(?:CN|OU)=[^,]+,?)+),)?(?<domain>(?:DC=[^,]+,?)+)$";
string dn = "CN=Exchange Servers,OU=Microsoft Exchange Security Groups,DC=gr-u,DC=it";

Match match = Regex.Matches(myDN, pattern)(0);

Console.WriteLine(match.Groups("cn").Value);
 // output: 
 // CN=Help Desk

Console.WriteLine(match.Groups("name").Value);
 // output:
 // Help Desk

Console.WriteLine(match.Groups("path").Value);
 // output:
 // OU=Microsoft Exchange Security Groups

Console.WriteLine(match.Groups("domain").Value);
 // output:
 // DC=gr-u,DC=it