usando activeDirectory desde C# - obtener el "LastLogon"

17/03/2005 - 19:42 por JC | Informe spam
Hola:

Busco obtener el "LastLogon"para un usuario desde Active Directory usando
C#. El valor lo obtengo, pero me devuelve un entero de 8 bytes (Int64) el
cual no logro procesar, porque no se como tratarlo. El entero aparentemente
es negativo o muy grande (en el caso de castearlo a unsigned).
Creo que debo estar usando mal este entero o el valor que me es devuelto
debo procesarlo de otra forma.

Alguien ha podido hacer esto? Saben como manejar ese entero?

DirectoryEntry gpMemberEntry = new DirectoryEntry("LDAP://" + memberColl);
//memberColl es un string para obtener informacion de un miembro X
DirectorySearcher searcher = new DirectorySearcher(gpMemberEntry);
searcher.PropertiesToLoad.Add("memberOf");
searcher.PropertiesToLoad.Add("lastLogon");

SearchResultCollection results = searcher.FindAll();
foreach(SearchResult result in results)
{
string str1 = result.Properties["memberOf"].Count.ToString();
string str2 = result.Properties["lastLogon"].Count.ToString();
object obj = result.Properties["lastLogon"][0];
Int64 lastLogon = (Int64)obj;
long last = System.Convert.ToInt64(lastLogon.ToString(), 10);

...
...

}

Gracias por la ayuda. Si debo postear en otro foro/lista, diganme por favor.

Juan Carlos
 

Leer las respuestas

#1 Braulio Diez
18/03/2005 - 13:11 | Informe spam
Hola

Por lo que he visto, El número que obtienes con "LastLogon" es: un entero
que representa el numero en intervalos de 100-nanosegundos desde el 1/1/16001
12:00 AM en UTC.

Para poder obtenerlo con C#: La propiedad "LastLogon" en Ad es un "large
integer". Necesita referencia a la librería COM ActiveDS.dll, y usar un
LargeInteger para coger los valores altos y bajos (high and low) de los 64
bits del entero. El valor es del tipo FileTime, el cual lo puedes convertir a
.net DateTime object.

Buena Suerte
Braulio



"JC" escribió:

Hola:

Busco obtener el "LastLogon"para un usuario desde Active Directory usando
C#. El valor lo obtengo, pero me devuelve un entero de 8 bytes (Int64) el
cual no logro procesar, porque no se como tratarlo. El entero aparentemente
es negativo o muy grande (en el caso de castearlo a unsigned).
Creo que debo estar usando mal este entero o el valor que me es devuelto
debo procesarlo de otra forma.

Alguien ha podido hacer esto? Saben como manejar ese entero?

DirectoryEntry gpMemberEntry = new DirectoryEntry("LDAP://" + memberColl);
//memberColl es un string para obtener informacion de un miembro X
DirectorySearcher searcher = new DirectorySearcher(gpMemberEntry);
searcher.PropertiesToLoad.Add("memberOf");
searcher.PropertiesToLoad.Add("lastLogon");

SearchResultCollection results = searcher.FindAll();
foreach(SearchResult result in results)
{
string str1 = result.Properties["memberOf"].Count.ToString();
string str2 = result.Properties["lastLogon"].Count.ToString();
object obj = result.Properties["lastLogon"][0];
Int64 lastLogon = (Int64)obj;
long last = System.Convert.ToInt64(lastLogon.ToString(), 10);

...
...

}

Gracias por la ayuda. Si debo postear en otro foro/lista, diganme por favor.

Juan Carlos



Preguntas similares