Если вы новичок в Active Directory, я предлагаю вам сначала понять, как Active Directory хранит данные.
Active Directory на самом деле является сервером LDAP. Объекты, хранящиеся на сервере LDAP, хранятся иерархически. Это очень похоже на то, как вы храните файлы в файловой системе. Вот почему он получил имя каталога сервера и в Active Directory ,
Контейнеры и объекты в Active Directory могут быть указаны с помощью файла distinguished name
. Вот такое выдающееся имя CN=SomeName,CN=SomeDirectory,DC=yourdomain,DC=com
. Как и в случае с традиционной реляционной базой данных, вы можете выполнять запросы к серверу LDAP. Это называется запрос LDAP.
Есть несколько способов выполнить запрос LDAP в .NET. Вы можете использовать DirectorySearcher из System.DirectoryServices
или SearchRequest из System.DirectoryServices.Protocol
.
Что касается вашего вопроса, поскольку вы просите конкретно найти объект пользователя-участника, я думаю, что наиболее интуитивно понятным способом является использование PrincipalSearcher из System.DirectoryServices.AccountManagement
. Вы можете легко найти много разных примеров в Google. Вот образец, который делает именно то, что вы просите.
using (var context = new PrincipalContext(ContextType.Domain, "yourdomain.com"))
{
using (var searcher = new PrincipalSearcher(new UserPrincipal(context)))
{
foreach (var result in searcher.FindAll())
{
DirectoryEntry de = result.GetUnderlyingObject() as DirectoryEntry;
Console.WriteLine("First Name: " + de.Properties["givenName"].Value);
Console.WriteLine("Last Name : " + de.Properties["sn"].Value);
Console.WriteLine("SAM account name : " + de.Properties["samAccountName"].Value);
Console.WriteLine("User principal name: " + de.Properties["userPrincipalName"].Value);
Console.WriteLine();
}
}
}
Console.ReadLine();
Обратите внимание, что у пользовательского объекта AD есть несколько атрибутов. В частности, givenName
даст вам First Name
и sn
даст вам Last Name
. По поводу имени пользователя. Я думаю, вы имели в виду имя пользователя для входа в систему. Обратите внимание, что на объекте пользователя AD есть два имени для входа. Один из samAccountName
них также известен как имя пользователя для входа в систему до Windows 2000. userPrincipalName
обычно используется после Windows 2000.