Как получить DirectoryEntry из DirectoryEntry и DN - PullRequest
6 голосов
/ 07 апреля 2011

У меня есть DirectoryEntry объект, представляющий пользователя.Из коллекции DirectoryEntry.Properties я получаю свойство "manager", которое даст мне значение «Отличительное имя» («DN») для менеджера пользователя.

Могу ли я получить объект DirectoryEntry дляменеджер из этих двух объектов?Если да, то как?

Я представляю что-то вроде DirectoryEntry.GetEntryFromDN(dnManager);, но не могу найти аналогичный вызов.

Просто чтобы уточнить, DirectoryEntry и DN - единственные фрагменты информации, которые яиметь.Я не могу создать новый DirectoryEntry, потому что тогда мне придется либо использовать каталог и учетные данные по умолчанию, либо указать имя / порт каталога и имя пользователя / пароль.

Ответы [ 2 ]

5 голосов
/ 10 апреля 2011
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();
    }
}
0 голосов
/ 07 апреля 2011

Вы можете создать новый экземпляр DirectoryEntry, предоставив DN в качестве аргумента, а затем попытка связывания (например, путем обновления свойств).

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

...