viernes, 27 de noviembre de 2009

Sacar el listado de usuarios de AD y la fecha de su último logon

Esto parece una tontería, porque si viene la baja de RRHH se debe desactivar inmediatamente la cuenta y luego borrarla, después de un tiempo prudencial, pero ¿nos acordamos siempre de borrarla?. Pasa saber el estado de los usuarios del Active directory lo mejor es sacar la información directamente de él, ¿no?.

Lo más sencillo es exportar la información del AD a un formato que podamos posteriormente manipular. Para eso MS tiene una herramienta llamada CSVDE que, como su nombre indica, Exporta el Dominio en formato CSV (me lo acabo de inventar)

Podemos exportar todo el dominio usando simplemente CSVDE -f MiDominio.csv o concretar un poco más con el listado de lo que queremos exportar. En mi caso quiero que exporte todos los usuarios con su nombre, apellido, clase, fecha de su último logon y el estado en el que se encuentra la cuenta. Para ello vamos a ejecutar el siguiente comando:

> csvde -r "(objectClass=user)" -f usuarios.csv -l cn,givenName,sn,n,ou,objectClass,lastLogon,UserAccountControl

Abrimos el fichero generado con Excel y cuando miramos la columna 'lastLogon' nos llevamos la primera sorpresa. El número que aparece es completamente ininteligible, ¿por qué?. La explicación es que Microsoft ha utilizado el 'timestamp' para marcar el tiempo, pero no el típico y normal de los segundos que han transcurrido desde la media noche del 1/1/1970, no, tenía que ser más original y crear un time stamp que se basa en un número de 64 bits que toma la fecha desde el 1/1/1601. Además lo cuenta en nanosegundos que luego divide entre 100. Fácil ¿no?. Pues resulta que lo metemos al Excel y este programita solo reconoce fechas desde el 1/1/1900, con lo que ya tenemos el lío otra vez formado. ¿Y ahora qué?. Por suerte el Excel es una hoja de cálculo y podemos aplicar una fórmula para sacarlo:

=IF(G2>0,G2/(8.64*10^11) - 109205,"")

NOTA: Excel 2010 me ha dado problemas con la fórmula de arriba. He utilizado esta otra:

=IF(G2>0; (G2/(8,64*10^11)) - 109205; "")


Digamos que G2 es la celda que contiene el 'timestamp'
Digamos que (8.64*10^11) es el número de nanosegundos de un día y dividido entre 100
Digamos que 109205 es el número de días desde 1601 hasta 1900
Digamos que hay que poner la columna de Excel que contiene este resultado en modo fecha

y de paso os pongo lo que significa cada 'UserAccountControl'

UserAccountControl_Num,Account_Status
512,Account: Enabled
514,Account: ACCOUNTDISABLE
528,Account: Enabled - LOCKOUT
530,Account: ACCOUNTDISABLE - LOCKOUT
544,Account: Enabled - PASSWD_NOTREQD
546,Account: ACCOUNTDISABLE - PASSWD_NOTREQD
560,Account: Enabled - PASSWD_NOTREQD - LOCKOUT
640,Account: Enabled - ENCRYPTED_TEXT_PWD_ALLOWED
2048,Account: INTERDOMAIN_TRUST_ACCOUNT
2080,Account: INTERDOMAIN_TRUST_ACCOUNT - PASSWD_NOTREQD
4096,Account: WORKSTATION_TRUST_ACCOUNT
8192,Account: SERVER_TRUST_ACCOUNT
66048,Account: Enabled - DONT_EXPIRE_PASSWORD
66050,Account: ACCOUNTDISABLE - DONT_EXPIRE_PASSWORD
66064,Account: Enabled - DONT_EXPIRE_PASSWORD - LOCKOUT
66066,Account: ACCOUNTDISABLE - DONT_EXPIRE_PASSWORD - LOCKOUT
66080,Account: Enabled - DONT_EXPIRE_PASSWORD - PASSWD_NOTREQD
66082,Account: ACCOUNTDISABLE - DONT_EXPIRE_PASSWORD - PASSWD_NOTREQD
66176,Account: Enabled - DONT_EXPIRE_PASSWORD - ENCRYPTED_TEXT_PWD_ALLOWED
131584,Account: Enabled - MNS_LOGON_ACCOUNT
131586,Account: ACCOUNTDISABLE - MNS_LOGON_ACCOUNT
131600,Account: Enabled - MNS_LOGON_ACCOUNT - LOCKOUT
197120,Account: Enabled - MNS_LOGON_ACCOUNT - DONT_EXPIRE_PASSWORD
532480,Account: SERVER_TRUST_ACCOUNT - TRUSTED_FOR_DELEGATION (Domain
Controller)
1049088,Account: Enabled - NOT_DELEGATED
1049090,Account: ACCOUNTDISABLE - NOT_DELEGATED
2097664,Account: Enabled - USE_DES_KEY_ONLY
2687488,Account: Enabled - DONT_EXPIRE_PASSWORD - TRUSTED_FOR_DELEGATION -
USE_DES_KEY_ONLY
4194816,Account: Enabled - DONT_REQ_PREAUTH
 
Digamos que ya he acabado esta entrada en el Blog ;-)





5 comentarios:

Unknown dijo...

deberias realizar como un videito
no surgirian tantas dudas.

Unknown dijo...

deberias publicar un videito
ya que surgen demasiadas dudas pero para comenzar esta bien

Anónimo dijo...

en que parte se pega el comando para convertir el lastlogon en una fecha normal

iamys dijo...

muchas gracias, lo hice y funciona super
La formula se pone en una columna aparte en el Excel para el q pregunto.
Si el excel está en Español queda asi
=SI( E2>0, (E2/(8.64*10^11)) - 109205, "")

Anónimo dijo...

Hola,

A mi no me funciona cada vez que lo ejecuto me sale la ayuda del comando