Se você é novo no Active Directory, sugiro que entenda como o Active Directory armazena dados primeiro.
O Active Directory é na verdade um servidor LDAP. Os objetos armazenados no servidor LDAP são armazenados hierarquicamente. É muito semelhante a você armazenar seus arquivos em seu sistema de arquivos. É por isso que recebeu o nome Directory server e Active Directory
Os recipientes e objetos no Active Directory podem ser especificados por a distinguished name
. O nome distinto é assim CN=SomeName,CN=SomeDirectory,DC=yourdomain,DC=com
. Como um banco de dados relacional tradicional, você pode executar uma consulta em um servidor LDAP. É chamado de consulta LDAP.
Existem várias maneiras de executar uma consulta LDAP no .NET. Você pode usar DirectorySearcher de System.DirectoryServices
ou SearchRequest de System.DirectoryServices.Protocol
.
Para sua pergunta, já que você está pedindo para localizar o objeto principal do usuário especificamente, acho que a maneira mais intuitiva é usar PrincipalSearcher de System.DirectoryServices.AccountManagement
. Você pode encontrar facilmente muitos exemplos diferentes no google. Aqui está um exemplo que está fazendo exatamente o que você está pedindo.
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();
Observe que, no objeto de usuário AD, há vários atributos. Em particular, givenName
dará a você o First Name
e sn
o Last Name
. Sobre o nome de usuário. Acho que você quis dizer o nome de logon do usuário. Observe que há dois nomes de logon no objeto de usuário AD. Um deles é samAccountName
, também conhecido como nome de logon do usuário anterior ao Windows 2000. userPrincipalName
é geralmente usado após o Windows 2000.