Home > vbscript, windows > VBScript – Script de verificação de data de criação de usuários

VBScript – Script de verificação de data de criação de usuários

Estava trocando idéia com um grande amigo Rodrigo Diniz, ele me dizia que precisava de um script para verificar a datas de criação das contas de usuário do Active Directory. Então achei interessante e aceitei o desafio, resolvi ajuda-lo a encontrar a solução. Fiz algumas pesquisas na internet especificamente no site technet e montei um vbscript baseado no link abaixo.

http://blogs.technet.com/heyscriptingguy/archive/2005/01/06/how-can-i-tell-on-what-date-an-active-directory-user-account-was-created.aspx

O script usa “Active Data Objects” (que dá base para o provedor de serviços de diretorio OLE DB provider chamado ADsDSOObject) para extrair ou buscar informações de objetos a partir do servidor de diretório da Microsoft o Active Directory.

On Error Resume Next

Set objConnection = CreateObject(“ADODB.Connection”)
Set objCommand = CreateObject(“ADODB.Command”)

objConnection.Provider = “ADsDSOObject”
objConnection.Open “Active Directory Provider”

Set objCommand.ActiveConnection = objConnection

objCommand.Properties(“Page Size”) = 1000
objCommand.Properties(“Searchscope”) = 2

objCommand.CommandText = “SELECT ADsPath FROM ‘LDAP://dc=yamaha,dc=com,dc=br’ WHERE objectCategory=’user'”

Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

Do Until objRecordSet.EOF
strPath = objRecordSet.Fields(“ADsPath”).Value
Set objUser = GetObject(strPath)
Wscript.Echo “Usuario: ” & objUser.FullName
Wscript.Echo “Data de criacao: ” & objUser.whenCreated & ” GMT”
objRecordSet.MoveNext
Loop

Vou tentar explicar passo a passo os comandos do script.

Set objConnection = CreateObject(“ADODB.Connection”)

Criamos o objeto ADODB.Connection o qual é usado para criar uma conexão para uma fonte de dados ou data source como se fosse um ponteiro, e através deste objeto você pode acessar e manipular o banco de dados, no nosso caso não será um banco de dados com tabelas e sim um serviço de diretório.

Set objCommand = CreateObject(“ADODB.Command”)

Criamos outro objeto “ADODB.Command” o qual é usado para executar uma consulta ou comandos dentro do banco de dados(ou data source), este objeto também serve para você poder deletar, excluir ou atualizar dados.

objConnection.Provider = “ADsDSOObject”
objConnection.Open “Active Directory Provider”

Aqui definimos as propriedades da variavel objConnection. A propriedade “Provider” determina qual provedor OLE DB será utilizado no caso do nosso script “ADsDSOObject” o qual é usado para conexão ao Active Directory.

Set objCommand.ActiveConnection = objConnection

Nesta linha ativamos a conexão ao AD utilizado um “ponteiro” para executar comandos dentro do AD(falando resumidamente).

objCommand.Properties(“Page Size”) = 1000
objCommand.Properties(“Searchscope”) = 2

Definimos algumas propriedades.

objCommand.CommandText = “SELECT ADsPath FROM ‘LDAP://dc=yamaha,dc=com,dc=br’ WHERE objectCategory=’user'”

Definimos a string de consulta, o qual iremos buscar todos os objetos do AD com categoria “User”, ou seja, vamos buscar todos os objetos que representam usuários.

Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

Executamos a consulta e movemos o ponteiro para o primeiro registro.

Do Until objRecordSet.EOF
strPath = objRecordSet.Fields(“ADsPath”).Value
Set objUser = GetObject(strPath)
Wscript.Echo “Usuario: ” & objUser.FullName
Wscript.Echo “Data de criacao: ” & objUser.whenCreated & ” GMT”
objRecordSet.MoveNext
Loop

Aqui fazemos um loop buscando nos objetos “User”, nome e data de criação da conta e “printando” e no final movendo o “ponteiro” para o próximo registro.

Nomeie o arquivo para user.vbs dé um duplo o qual invocará o
wscript.exe que é o padrão para o WIndows e usa janelas gráficas ou ainda utilizar o cscript.exe para poder escrever arquivos de lote sem recursos gráficos. Abaixo segue a saída do comando via cscript.exe.

C:\Documents and Settings\Administrator\Desktop>cscript user.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

Account created: 5/5/2009 8:08:02 PM GMT
Password last changed: 5/5/2009 1:42:23 PM

Account created: 5/5/2009 8:08:02 PM GMT

User: CN=Microsoft Corporation,L=Redmond,S=Washington,C=US
Account created: 5/5/2009 8:08:02 PM GMT
Password last changed: 5/5/2009 4:48:36 PM

Account created: 5/5/2009 7:15:59 PM GMT
Password last changed: 5/5/2009 5:15:59 PM

User: srv-winbind
Account created: 5/26/2009 8:26:54 PM GMT
Password last changed: 5/28/2009 6:31:36 PM

User: kakaroto
Account created: 5/28/2009 8:23:08 PM GMT
Password last changed: 6/25/2009 6:22:54 PM

User: email
Account created: 6/19/2009 9:52:05 PM GMT
Password last changed: 6/25/2009 6:27:04 PM

C:\Documents and Settings\Administrator\Desktop>

Após o script ser testado e funcionando o Dr Diniz veio com mais uma “bucha”, descobrir qual a ultima vez que o usuario fez logon. Aceitei mais uma fez o desafio, em principio e somente dar um “wscript.echo” no lastlogon, porém não é bem assim lendo e relendo nos confins da internet descobri uma coisa interessante conforme link abaixo.

http://www.linhadecodigo.com.br/Artigo.aspx?id=1706

O valor retornado representa número de segundos passados desde as 0:00 de 01/01/1601. assim teremos que fazer um pequeno calculo para converter para o formato de data convencional.

On Error Resume Next

Set objUser = GetObject(“LDAP://cn=kakaroto,cn=users,dc=yamaha,dc=com,dc=br”)
Wscript.Echo objUser.WhenCreated

Set objLastLogon = objUser.Get(“lastLogonTimestamp”)
intLastLogonTime = objLastLogon.HighPart * (2^32) + objLastLogon.LowPart
intLastLogonTime = intLastLogonTime / (60 * 10000000)
intLastLogonTime = intLastLogonTime / 1440
Wscript.Echo “Last logon time: ” & intLastLogonTime + #1/1/1601#

Salve o arquivo com qualquer nome de sua preferencia, porém com extensão vbs e execute(novamente com cscript.exe).

C:\Documents and Settings\Administrator\Desktop>cscript lastlogon.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

5/28/2009 8:23:08 PM
Last logon time: 1/1/1601

C:\Documents and Settings\Administrator\Desktop>

Bom nao é muito de costume programar, mas gosto de utilizar o desenvolvimento para resolver problema de infra-estrutura e este foi mais um exemplo. Como dizia um grande amigo Thiago(vulgo maluco) “O melhor programador é o melhor administrador de rede” e “O melhor administrador de rede é o melhor programador”. 🙂

Até a próxima.

Advertisements
Categories: vbscript, windows
  1. rodrigo Diniz
    January 7, 2010 at 9:16 pm

    Este script foi show de bola. Foi muito útil para mim e obtive as informações que eu estava necessitando.

    Muito obrigado Ricardo

  2. Paulo
    January 13, 2010 at 12:29 pm

    É muito mais ou menos este script……. 🙂

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: