Se sei nuovo in Active Directory, ti suggerisco di capire come Active Directory memorizza prima i dati.
Active Directory è in realtà un server LDAP. Gli oggetti archiviati nel server LDAP vengono archiviati gerarchicamente. È molto simile a quando archivi i tuoi file nel tuo file system. Ecco perché ha ottenuto il nome Directory server e Active Directory
I contenitori e gli oggetti su Active Directory possono essere specificati da un file distinguished name. Il nome distinto è così CN=SomeName,CN=SomeDirectory,DC=yourdomain,DC=com. Come un database relazionale tradizionale, puoi eseguire query su un server LDAP. Si chiama query LDAP.
Esistono diversi modi per eseguire una query LDAP in .NET. È possibile utilizzare DirectorySearcher da System.DirectoryServiceso SearchRequest da System.DirectoryServices.Protocol.
Per la tua domanda, dal momento che stai chiedendo di trovare specificamente l'oggetto principale dell'utente, penso che il modo più intuitivo sia usare PrincipalSearcher da System.DirectoryServices.AccountManagement. Puoi facilmente trovare molti esempi diversi da google. Ecco un esempio che sta facendo esattamente quello che stai chiedendo.
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();
Notare che sull'oggetto utente AD sono presenti numerosi attributi. In particolare, givenNameti darà il First Namee snti darà il Last Name. Informazioni sul nome utente. Penso che intendessi il nome di accesso dell'utente. Notare che esistono due nomi di accesso sull'oggetto utente AD. Uno è samAccountName, noto anche come nome di accesso utente precedente a Windows 2000. userPrincipalNameviene generalmente utilizzato dopo Windows 2000.