public List<Usuario> GetUsers()
{
List<Usuario> lUsuarios = new List<Usuario>();
SPSecurity.RunWithElevatedPrivileges(delegate()
{
//Nome do grupo de usuários que estamos procurando no AD, geralmente devemos buscar um grupo específico
//então já deixei este parâmetro aqui para facilitar
string GroupName = "windowsSharepoint";
//Nome do domínio a ser procurado
string domain = "administrativo";
//Propriedade de Indexação, default para todos os ADs
string[] properties = new string[] { "fullname" };
//Forma de conexão, via LDAP
DirectoryEntry adRoot = new DirectoryEntry("LDAP://" + domain, null, null, AuthenticationTypes.Secure);
DirectorySearcher searcher = new DirectorySearcher(adRoot);
searcher.SearchScope = SearchScope.Subtree;
searcher.ReferralChasing = ReferralChasingOption.All;
searcher.PropertiesToLoad.AddRange(properties);
//Filtro utilizando o grupo definido acima, se não for necessário utilizar um filtro é só comentar esta linha
searcher.Filter = "(&(objectClass=group)(cn=" + GroupName + "))";
SearchResult result = searcher.FindOne();
if (result != null)
{
DirectoryEntry deGroup = new DirectoryEntry(result.Path, null, null, AuthenticationTypes.Secure);
//Criando a sua property collection, com todas as propriedades retornadas
System.DirectoryServices.PropertyCollection pcoll = deGroup.Properties;
int n = pcoll["member"].Count;
//Se existir usuários encontrados na busca, executamos um laço que irá adicionalos em uma nova lista.
for (int l = 0; l < n; l++)
{
//Criando o link de acesso para um usuário específico do AD, para buscar as propriedades específicas
DirectoryEntry deUser = new DirectoryEntry("LDAP://" + domain + "/" + pcoll["member"][l].ToString(), null, null, AuthenticationTypes.Secure);
//Validação para verificar se o usuário está desabilitado
//Pode variar de AD para AD, porem este é o padrão
if (deUser.Properties["userAccountControl"][0].ToString() != "514")
{
//Objeto Usuário criado para armazenar as propriedades
Usuario oUsuario = new Usuario();
//Utiliza-se o try e catch pois as propriedades podem não estar acessiveis ou não serem encontradas em determinado AD
//Com isto buscamos apenas as propriedades que forem encontradas e que estejam preenchidas
try
{
if (deUser.Properties["displayName"] != null && deUser.Properties["displayName"][0] != null)
oUsuario.Nome = deUser.Properties["displayName"][0].ToString();
}
catch { }
try
{
if (deUser.Properties["mail"] != null && deUser.Properties["mail"][0] != null)
oUsuario.Email = deUser.Properties["mail"][0].ToString();
}
catch { }
try
{
if (deUser.Properties["telephoneNumber"] != null && deUser.Properties["telephoneNumber"][0] != null)
oUsuario.Ramal = deUser.Properties["telephoneNumber"][0].ToString();
}
catch { }
try
{
if (deUser.Properties["department"] != null && deUser.Properties["department"][0] != null)
oUsuario.Departamento = deUser.Properties["department"][0].ToString();
}
catch { }
//Adicionando o usuário com as propriedades preenchidas na nossa listagem
lUsuarios.Add(oUsuario);
}
//Fechando o objeto de entrada no diretório do usuário
deUser.Close();
}
//Fechando o objeto de entrada no diretório dos grupos
deGroup.Close();
}
});
//Retornando a Lista Preenchida
return lUsuarios;
}
Para que este código funcione você terá que criar o objeto Usuário, segue a estrutura da classe abaixo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Demonstracao.Intranet.WebParts
{
public class Usuario
{
#region Variaveis
private string _Nome;
private string _Ramal;
private string _Departamento;
private string _Email;
#endregion
#region Propriedades
public string Nome
{
get { return _Nome; }
set { _Nome = value; }
}
public string Ramal
{
get { return _Ramal; }
set { _Ramal = value; }
}
public string Departamento
{
get { return _Departamento; }
set { _Departamento = value; }
}
public string Email
{
get { return _Email; }
set { _Email = value; }
}
#endregion
}
}
Pronto, com isto temos a nossa busca no Active Directory sendo executada e uma lista dos usuários(com algumas propriedades mais utilizadas) de um grupo específico em uma List, podendo ser trabalhada da melhor forma.
Segue uma lista completa dos atributos de um Active Directory, mas sempre é bom verificar com o administrador de rede qual as propriedades que contem as informações que você precisa para sua solução:
http://msdn.microsoft.com/en-us/library/ms675090(v=VS.85).aspx
Abs e até a próxima.
Muito bom cara! Obrigado por compartilhar, me ajudou bastante.
[]‘s