Якщо ви новачок у Active Directory, я пропоную вам зрозуміти, як Active Directory спочатку зберігає дані.
Active Directory - це фактично сервер LDAP. Об'єкти, що зберігаються на сервері LDAP, зберігаються ієрархічно. Це дуже схоже на зберігання файлів у вашій файловій системі. Ось чому він отримав ім'я сервера Directory та Active Directory
Контейнери та об'єкти в Active Directory можуть бути визначені a 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.