如何从DirectoryEntry和DN中检索DirectoryEntry

本文关键字:DirectoryEntry 检索 DN | 更新日期: 2023-09-27 17:49:20

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

我可以从这两个对象中为管理器检索DirectoryEntry对象吗?如果有,怎么做?

我正在设想类似DirectoryEntry.GetEntryFromDN(dnManager);的东西,但我找不到类似的呼叫。

为了澄清,DirectoryEntry和DN是我仅有的信息片段。我不能实例化一个新的DirectoryEntry,因为这样我就不得不使用默认的目录和凭据,或者有目录名称/端口和用户名/密码。

如何从DirectoryEntry和DN中检索DirectoryEntry

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();
    }
}

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

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