Якщо ви новачок у 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.