Ответ 1
Если вы новичок в Active Directory, я предлагаю вам понять, как Active Directory сохраняет данные в первую очередь.
Active Directory на самом деле является сервером LDAP. Объекты, хранящиеся на сервере LDAP, хранятся иерархически. Он очень похож на то, что вы храните файлы в своей файловой системе. Вот почему он получил имя Directory Server и Active Directory
Контейнеры и объекты в Active Directory могут быть указаны с помощью distinguished name
. Различающееся имя похоже на CN=SomeName,CN=SomeDirectory,DC=yourdomain,DC=com
. Как традиционная реляционная база данных, вы можете запускать запрос с сервера LDAP. Он вызвал запрос LDAP.
Существует несколько способов запуска LDAP-запроса в .NET. Вы можете использовать DirectorySearcher из System.DirectoryServices
или SearchRequest from 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.