Cómo obtener el valor de un atributo (lastLogon) de un dominio Active Directory (LDAP) para un objeto de tipo Computer mediante Visual Studio .NET C#.
- Requisitos para leer valores de atributos de objetos en Active Directory (AD DS) con C#.
- Clase LDAP para obtener valores de atributos de objetos (computers) en Active Directory (LDAP).
- Ejemplo de uso de la clase LDAP para obtener valor de atributo lastLogon de computer en Active Directory AD DS.
Requisitos para leer valores de atributos de objetos en Active Directory (AD DS) con C#
Necesitaremos disponer de un dominio AD DS (Active Directory Domain Services) de Microsoft, montado sobre Windows Server. En el siguiente artículo explicamos cómo montar Active Directory en Windows Server 2022:
Los equipos en los que se ejecute el programa en C#, deberán estar agregados a dicho dominio. En el siguiente enlace explicamos cómo agregar un equipo a un dominio AD DS:
Para este ejemplo, obtendremos el atributo «lastLogon» (fecha de último inicio de sesión) del objeto «computer» (equipo), aunque el procedimiento será similar para obtener el resto de atributos de un objeto de Active Directory (AD DS LDAP):

Clase LDAP para obtener valores de atributos de objetos (computers) en Active Directory (LDAP)
Añadiremos la siguiente clase a nuestro proyecto C#, será la encargada de acceder al dominio y obtener el valor del atributo lastLogon (como ejemplo) para un equipo (computer) que se le pasará como parámetro:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
using System; using System.DirectoryServices; namespace InfoActiveDirectory { class LDAP { //Obtener atributo lastLogon de objeto computer de LDAP (Active Directory) public static void ObtenerLastLogonLDAPEquipo(ref DateTime lastLogon) { //Obtenemos el dominio y el nombre del equipo Inventario inv = new Inventario(); string dominio = inv.obtenerDominioEquipo(); string equipo = inv.obtenerNombrePC(); //Inicializamos a fecha mínima el lastLogon lastLogon = DateTime.MinValue; if (!string.IsNullOrEmpty(dominio) && !string.IsNullOrEmpty(equipo)) { try { using (var entradaDirectorio = new DirectoryEntry(string.Format("LDAP://{0}", dominio))) { var busqueda = new DirectorySearcher(entradaDirectorio, (string.Format("(&(objectCategory=computer)(name={0}))", equipo))); busqueda.PropertiesToLoad.Add("lastLogon"); busqueda.SizeLimit = 1; SearchResult resultadoBusqueda = busqueda.FindOne(); if (resultadoBusqueda != null) { //Obtenemos lastLogon DateTime ultimoInicioObtenidoLDAP = DateTime.MinValue; if (resultadoBusqueda.Properties.Contains("lastLogon")) { ultimoInicioObtenidoLDAP = DateTime.FromFileTime((long)resultadoBusqueda.Properties["lastLogon"][0]); } if (DateTime.Compare(ultimoInicioObtenidoLDAP, lastLogon) > 0) lastLogon = ultimoInicioObtenidoLDAP; } } } catch (Exception error) { string texto = $"Error al obtener lastLogon de LDAP equipo [{equipo}]. Error: {error.Message}"; Log.EsLog(texto, false); MDebug.ILogDebug(System.Reflection.MethodBase.GetCurrentMethod().Name, "Obtener datos LDAP", "S", texto); } } } } } |
Ejemplo de uso de la clase LDAP para obtener valor de atributo lastLogon de computer en Active Directory AD DS
Un ejemplo de uso de la clase anterior, para obtener la fecha de último inicio de sesión (lastLogon) del computer con nombre «smfacturacion» puede ser:
1 2 |
DateTime lastLogon = DateTime.MinValue; LDAP.ObtenerLastLogonLDAPEquipo(ref lastLogon); |