
Si sois administradores de sistemas con Active Directory estaréis acostumbrados a lidiar con la gestión de cientos o incluso miles de usuarios y ordenadores.
En estas circustancias, muchas veces resulta de utilidad hacer consultas a Active Directory desde C# para acceder, filtrar, o ejecutar acciones de forma rápida y cómoda desde alguno de nuestros desarrollos.
Con este objetivo, compartimos el código necesario para hacer consultas de usuarios y ordenadores desde Active Directory mediante C#.
Consultar usuarios desde Active Directory
Para que el código funcione es necesario importar el ensamblado System.DirectoryServices;
El código para importar usuarios es el siguiente. Podéis personalizar las propiedades devueltas por la consulta a vuestro gusto. Recordar cambiar XXXXXX por el nombre de vuestro AD, e YYY por la extensión.
public ListGetADUsers() { List rst = new List (); string DomainPath = "LDAP://DC=XXXXXX,DC=YYY"; DirectoryEntry adSearchRoot = new DirectoryEntry(DomainPath); DirectorySearcher adSearcher = new DirectorySearcher(adSearchRoot); adSearcher.Filter = "(&(objectClass=user)(objectCategory=person))"; adSearcher.PropertiesToLoad.Add("samaccountname"); adSearcher.PropertiesToLoad.Add("title"); adSearcher.PropertiesToLoad.Add("mail"); adSearcher.PropertiesToLoad.Add("usergroup"); adSearcher.PropertiesToLoad.Add("company"); adSearcher.PropertiesToLoad.Add("department"); adSearcher.PropertiesToLoad.Add("telephoneNumber"); adSearcher.PropertiesToLoad.Add("mobile"); adSearcher.PropertiesToLoad.Add("displayname"); SearchResult result; SearchResultCollection iResult = adSearcher.FindAll(); User item; if (iResult != null) { for (int counter = 0; counter < iResult.Count; counter++) { result = iResult[counter]; if (result.Properties.Contains("samaccountname")) { item = new User(); item.UserName = (String)result.Properties["samaccountname"][0]; if (result.Properties.Contains("displayname")) { item.DisplayName = (String)result.Properties["displayname"][0]; } if(result.Properties.Contains("mail")) { item.Email = (String)result.Properties["mail"][0]; } if (result.Properties.Contains("company")) { item.Company = (String)result.Properties["company"][0]; } if (result.Properties.Contains("title")) { item.JobTitle = (String)result.Properties["title"][0]; } if (result.Properties.Contains("department")) { item.Deparment = (String)result.Properties["department"][0]; } if (result.Properties.Contains("telephoneNumber")) { item.Phone = (String)result.Properties["telephoneNumber"][0]; } if (result.Properties.Contains("mobile")) { item.Mobile = (String)result.Properties["mobile"][0]; } rst.Add(item); } } } adSearcher.Dispose(); adSearchRoot.Dispose(); return rst; } public class User { public string UserName { get; set; } public string DisplayName { get; set; } public string Company { get; set; } public string Deparment { get; set; } public string JobTitle{ get; set; } public string Email { get; set; } public string Phone { get; set; } public string Mobile { get; set; } }
Consultar ordenadores desde Active Directory
Por su parte, el código necesario para listar los ordenadores del AD es el siguiente. Igualmente podéis personalizar las propiedades devueltas a vuestro antojo, y no olvidéis cambiar XXXXXX e YYY por el nombre y extensión de vuestro AD, respectivamente.
public static ListGetADComputers() { List rst = new List (); string DomainPath = "LDAP://DC=XXXXXX,DC=YYY"; DirectoryEntry adSearchRoot = new DirectoryEntry(DomainPath); DirectorySearcher adSearcher = new DirectorySearcher(adSearchRoot); adSearcher.Filter = ("(objectClass=computer)"); adSearcher.PropertiesToLoad.Add("description"); adSearcher.SizeLimit = int.MaxValue; adSearcher.PageSize = int.MaxValue; SearchResult result; SearchResultCollection iResult = adSearcher.FindAll(); Computer item; for (int counter = 0; counter < iResult.Count; counter++) { result = iResult[counter]; string ComputerName = result.GetDirectoryEntry().Name; if (ComputerName.StartsWith("CN=")) ComputerName = ComputerName.Remove(0, "CN=".Length); item = new Computer(); item.ComputerName = ComputerName; if (result.Properties.Contains("description")) { item.Description = (String)result.Properties["description"][0]; } rst.Add(item); } adSearcher.Dispose(); adSearchRoot.Dispose(); return rst; } public class Computer { public string ComputerName { get; set; } public string Description { get; set; } }
Esperamos que el código os sea de utilidad y si tenéis cualquier duda ¡no dudéis en dejarnos vuestro comentario!