如何遍历具有可分辨名称的目录

时间:2011-04-07 16:06:09

标签: c# .net active-directory ldap

如果我有目录路径(以及相应的凭据),例如:

LDAP://directory:389/DC=domain,DC=com

我可以使用哪些类/方法通过其专有名称(DN)属性访问各种对象?我已经尝试了DirectoryEntry类,但没有找到任何方法从“基础”对象和DN中检索DirectoryEntry对象。

示例:拥有上面的目录网址和DN CN=User,OU=Development,DC=domain,DC=com,如何访问DirectoryEntry的{​​{1}}(或类似)对象?

我已经看到一些涉及URL的字符串操作的解决方案,但我正在寻找一种方法来使用普通的.NET对象/类来实现这一点。

3 个答案:

答案 0 :(得分:1)

全部解释为here

以下是一个例子:

DirectoryEntry userEntry = new DirectoryEntry("LDAP://directory:389/CN=User,OU=Development,DC=domain,DC=com",
                                              "<adminAccountName>",
                                              "<adminPassword");

有一个好的教程here

答案 1 :(得分:0)

您可以使用DirectorySearcher从根DirectoryEntry搜索子树吗?

在评论中注明时,这无济于事。我认为没有任何替代方法可以解析DirectoryEntry.Path,提取您需要的位数,并连接您的DN,如果需要,可以转义DN中的任何特殊字符。

您需要包括第三个斜杠在内的所有内容:

LDAP://server:port/relativePath

或使用无服务器绑定时的第二个斜杠:

LDAP://relativePath

但如果relativePath本身包含斜杠(将使用反斜杠进行转义),则可能存在歧义。所以,正如你所说,字符串操作。

答案 2 :(得分:0)

这是我目前使用的不太理想的方法:

string GetNewDN(DirectoryEntry deBase, string DN)
{
    try
    {   // Handle the LDAP://example.com:389/DN=string formats
        return (new Uri(deBase.Path)).GetLeftPart(UriPartial.Authority) + "/" + DN.Replace("/", @"\/");
    }
    catch (UriFormatException)
    {   // Handle the LDAP://DN=string formats
        return deBase.Path.Substring(0, deBase.Path.IndexOf(":")) + "://" + DN.Replace("/", @"\/");
    }
}