Первое, что я бы попробовал в качестве теста, - это жестко указать желаемый путь при создании записи каталога следующим образом:
DirectoryEntry de = new DirectoryEntry("LDAP://OU=Users,DC=company,DC=local");
Это довольно быстро скажет вам, является ли это действительным путем в вашей Active Directory. Я не знаю, как выглядит ваша AD, поэтому я не могу сказать вам, является ли это правильный путь или нет. Если в вашем подключаемом модуле Active Directory «Пользователи и компьютеры» указан правильный путь, то у вас должен быть корневой домен и папка OU в корневом каталоге «Пользователи».
Пути генерируются в обратном направлении в AD, поэтому, если ваша папка Users находится под другой OU вне корня, чем это будет
DirectoryEntry de = new DirectoryEntry("LDAP://OU=Users,OU=<first OU folder>,DC=company,DC=local");
Итак, ваша схема AD будет выглядеть так:
Root
|
--><first OU folder>
|
-->Users
Отличная статья о том, как управлять Active Directory в .NET:
Как: сделать (почти) все в Active Directory через C #
Возможно, вы также захотите изучить пространства имен System.DirectoryServices, System.DirectoryServices.ActiveDirectory и System.DirectoryServices.AccountManagement, представленные в .Net 3.5 Framework. Я полагаю, что System.DirectoryServices и пространства имен ActiveDirctory были доступны начиная с .Net 1.1, а AccountManagement был представлен в .Net 3.5.
Документация Microsoft - множество полезных ссылок о том, как использовать пространство имен
Добавление:
Чтобы действительно найти пользователя в AD, вам нужно сделать следующее:
DirectoryEntry de = new DirectoryEntry();
de.Path = "LDAP://DC=company,DC=local";
de.AuthenticationType = AuthenticationTypes.Secure;
DirectorySearcher deSearch = new DirectorySearcher();
deSearch.SearchRoot = de;
deSearch.Filter = "(&(objectClass=user) (cn=" + username + "))";
SearchResult result = deSearch.FindOne();
if (result != null)
{
DirectoryEntry deUser = new DirectoryEntry(result.Path);
... do what ever you need to the deUser
deUser.Close();
}