Obtendo usuários de grupo AD

Abaixo está um simples código para se obter os usuários que pertencem a determinado grupo de AD. Este snippet percorre recursivamente o AD, preenchendo um arraylist com os usuários nele presentes.

É uma Console Application, e recebe como parâmetros o nome do grupo (ex.: Grp-Desenvolvedores) e o LDAP (ex.: LDAP://DC=dominio,DC=com,DC=br)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Collections;
using System.DirectoryServices;
using System.IO;


namespace ADUsersFromGroup
{
class Program
{
static ArrayList _userNames = new ArrayList();
static ArrayList _groupNames = new ArrayList();

static void Main(string[] args)
{
Console.WriteLine("Informe o nome do grupo AD e pressione ENTER: ");
string group = Console.ReadLine();
string ldap = Console.ReadLine();
ArrayList list = GetADGroupUsers(group, ldap);
using (StreamWriter sr = new StreamWriter("c:\\usuarios.txt", false))
{
foreach (var item in list)
sr.WriteLine("{0}", item);
}
Console.WriteLine("********** FIM **********");
}

static ArrayList GetADGroupUsers(string groupName, string ldap)
{
SearchResultCollection results;
DirectorySearcher search = new DirectorySearcher(ldap);
search.Filter = String.Format("(cn={0})", groupName);
results = search.FindAll();
foreach (SearchResult result in results)
{
ResultPropertyCollection resultPropColl = result.Properties;
foreach (Object memberColl in resultPropColl["member"])
{
DirectoryEntry gpMemberEntry = new DirectoryEntry("LDAP://" + memberColl);
System.DirectoryServices.PropertyCollection userProps = gpMemberEntry.Properties;
object objetoAD = userProps["sAMAccountName"].Value;
if ((userProps["objectClass"].Value as object[]).Contains<object>("group"))
{
// valida se já percorremos este grupo
if (!_groupNames.Contains(objetoAD))
{
_groupNames.Add(objetoAD.ToString());
Console.WriteLine("Explodindo membros do grupo {0} ...", objetoAD);
GetADGroupUsers(objetoAD.ToString());
}
}
else
{
if (!_userNames.Contains(objetoAD))
{
_userNames.Add(objetoAD.ToString());
Console.WriteLine(" Incluindo {0} ...", objetoAD);
}
}
}
}
return _userNames;
}
}
}


UPDATE 2011-08-07 : colocando o SyntaxHighlighter no código.

Comentários

Postagens mais visitadas deste blog

Trocando configurações padrão do Live TIM

Uma proposta de Clean Architecure com Modelo de Atores

Testes automatizados em sistemas autenticados com certificados digitais, usando Selenium e PhantomJS