Como posso obter uma lista de usuários do Active Directory? Existe uma maneira de obter nome de usuário, nome, sobrenome? Eu vi uma postagem semelhante em que isso foi usado:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN");
Eu nunca fiz nada com o Active Directory, então estou completamente perdido. Qualquer ajuda seria muito apreciada!
c#
asp.net
.net
active-directory
Mike
fonte
fonte
Respostas:
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 é assimCN=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 deSystem.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.Observe que, no objeto de usuário AD, há vários atributos. Em particular,
givenName
dará a você oFirst Name
esn
oLast 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.fonte
if (((UserPrincipal)result).EmailAddress != null)
antes de adicionar o resultado à minha lista.Se você deseja filtrar as contas ativas, adicione ao código de Harvey:
após o primeiro uso. Então adicione
antes de encontrar tudo. E isso deve te dar os mais ativos.
fonte
searcher.QueryFilter = userPrin;
, pois já passamos o usuário principal para o pesquisador principal na inicialização, mas, caso contrário, obrigado pela dica sobre a filtragem de usuários ativos apenas!using (var searcher = new PrincipalSearcher(new UserPrincipal(context){ Enabled = true }))
Enabled
tinha um valor primeiro:if (userPrincipal.Enabled.HasValue)
Certamente o crédito vai para @Harvey Kwok aqui, mas eu só queria adicionar este exemplo porque, no meu caso, eu queria obter uma Lista real de Princípios do Usuário. Provavelmente é mais eficiente filtrar essa consulta antecipadamente, mas em meu ambiente pequeno, é mais fácil extrair tudo e filtrar conforme necessário mais tarde da minha lista.
Dependendo do que você precisa, pode não ser necessário transmitir para DirectoryEntry, mas algumas propriedades não estão disponíveis em UserPrincipal.
fonte
Inclua System.DirectoryServices.dll e, em seguida, use o código abaixo:
fonte