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.DirectoryServices
o 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, givenName
ti darà il First Name
e sn
ti 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. userPrincipalName
viene generalmente utilizzato dopo Windows 2000.