【问题标题】:How to retrieve DirectoryEntry from a DirectoryEntry and a DN如何从 DirectoryEntry 和 DN 检索 DirectoryEntry
【发布时间】:2011-04-06 20:51:17
【问题描述】:

我有一个代表用户的DirectoryEntry 对象。从DirectoryEntry.Properties 集合中,我正在检索"manager" 属性,这将为我提供用户经理的专有名称(“DN”)值。

我可以仅从这两个对象中检索经理的DirectoryEntry 对象吗?如果有,怎么做?

我正在设想类似DirectoryEntry.GetEntryFromDN(dnManager);,但我找不到类似的电话。

澄清一下,DirectoryEntry 和 DN 是我拥有的唯一信息。我无法实例化新的DirectoryEntry,因为那样我将不得不使用默认目录和凭据,或者拥有目录名称/端口和用户名/密码。

【问题讨论】:

    标签: c# .net active-directory ldap


    【解决方案1】:
    DirectoryEntry User = YourPreExistingUser();
    
    string managerDN = User.Properties["manager"][0].ToString();
    
    // Browse up the object hierarchy using DirectoryEntry.Parent looking for the
    // domain root (domainDNS) object starting from the existing user.
    DirectoryEntry DomainRoot = User;
    
    do
    {
        DomainRoot = DomainRoot.Parent;
    }
    while (DomainRoot.SchemaClassName != "domainDNS");
    
    // Use the domain root object we found as the search root for a DirectorySearcher
    // and search for the manager's distinguished name.
    using (DirectorySearcher Search = new DirectorySearcher())
    {
        Search.SearchRoot = DomainRoot;
    
        Search.Filter = "(&(distinguishedName=" + managerDN + "))";
    
        SearchResult Result = Search.FindOne();
    
        if (Result != null)
        {
            DirectoryEntry Manager = Result.GetDirectoryEntry();
        }
    }
    

    【讨论】:

    • 我宁愿自己不遍历目录树或构造搜索查询,但看起来这是目前最好的答案。
    • 这可能不是最快的方法(在我的机器上似乎有点慢),但它确实帮助我快速修复。谢谢 :)
    【解决方案2】:

    您可以创建一个新的 DirectoryEntry 实例,提供 DN 作为参数,然后 尝试绑定(例如通过刷新属性)。

    DirectoryEntry e = new DirectoryEntry(dn, "u", "p");
    e.RefreshCache();

    【讨论】:

    • 但这只会使用默认目录创建DirectoryEntry;我需要考虑不使用机器默认目录的目录。看起来您还假设我可以静态提供连接凭据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多