Quantcast
Channel: Luis Llamas
Viewing all articles
Browse latest Browse all 1123

Obtener usuarios y ordenadores de Active Directory con C#

$
0
0
csharp-active-directory

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 List GetADUsers()
{
	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 List GetADComputers()
{
	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!


Viewing all articles
Browse latest Browse all 1123

Trending Articles