viernes, 9 de marzo de 2012

Obtener usuarios de Active Directory usando c#

A continuación les comparto la forma en que podemos obtener los usuarios activos en el Active Directory, debemos agregar las referencias:


using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;

Y luego el código es el siguiente:

                DirectoryContext dc = new DirectoryContext(DirectoryContextType.Domain, Environment.UserDomainName);
                Domain domain = Domain.GetDomain(dc);
                DirectoryEntry de = domain.GetDirectoryEntry();

                LlenarUsuarios(de);

Este es el método para llenar los usuarios:

        private void LlenarUsuarios(DirectoryEntry de)
        {
            DirectorySearcher deSearch = new DirectorySearcher(de);

            deSearch.Filter = "(&(objectClass=user)(objectCategory=person))";
            SearchResultCollection results = deSearch.FindAll();

            foreach (SearchResult srUser in results)
            {
                DirectoryEntry deUser = srUser.GetDirectoryEntry();

                int flag = (int)deUser.Properties["userAccountControl"].Value;

                bool mActivo = false;
                if (!Convert.ToBoolean(flag & 0x0002)) mActivo = true;

                if (deUser.Properties["sAMAccountName"].Value.ToString().Contains(".") && mActivo) CheckBoxList1.Items.Add(deUser.Properties["sAMAccountName"].Value.ToString());
            }


De nuevo espero haberles sido de utilidad.

3 comentarios:

  1. Muy buen aporte..... gracias te la discutiste

    ResponderEliminar
  2. Estoy usando windows server 2012 y me sale este error the specified domain either does not exist or could not be contacted en estas lineas:
    DirectoryContext dc = new DirectoryContext(DirectoryContextType.Domain, Environment.UserDomainName);
    Domain domain = Domain.GetDomain(dc);

    ResponderEliminar
  3. Justo lo que estaba buscando. Muchas gracias. Además es un código limpio y sencillo.

    ResponderEliminar