none
Verificar último acesso de uma estação no AD através de uma das suas propriedades no AD RRS feed

  • Pergunta

  • Boa tarde...
    Já pesquisei nesse próprio fórum e em outros locais na internet sobre como determinar o último acesso ao AD por uma determinada estação. Também já conheço a ferramenta OLD-CMP.
    Porém acho que se eu conseguir obter, através de um script, uma determinada informação que eu consigo visualizar em uma console MMC no Active Directory User and Computers, já vai me ajudar muito nisso.
    Eu reparei que se eu verificar as propriedades de uma estação de trabalho no AD e acessar a aba Object, tenho algumas informações disponíveis, sendo uma delas quando houve uma modificação na conta (Modified). Reparei também que essa data é modificadacada vez que a estação é iniciada e acessa  o AD. Então caso eu consiga obter por meio de um script essa informação teria como ter uma idéia de quando determinada estação acessou o AD pela última vez, já que pelo o que observei, essa data só é alterada quando a estação acessa o AD, quando ela é renomeada ou então quando é movida de uma OU para outra.
    Caso alguém saiba como obter esses dados por meio de um script, já me atenderei bem.
    Agradeço o auxílio.
    segunda-feira, 8 de junho de 2009 18:59

Respostas

  • Olá,

    Faça um teste com o script abaixo:



    Set oADSystemInfo = CreateObject("ADSystemInfo")
    strDefaultDN = oADSystemInfo.username

    strDN = InputBox("Coloque o DN do usuario" & _
        vbCrLf & "Exemplo " & strDefaultDN , , strDefaultDN )

    If strDN = "" Then WScript.Quit(1)        'user clicked Cancel

    Set objUser = GetObject("LDAP://" & strDN)
    Set objLastLogon = objUser.Get("lastLogon")
    intLastLogonTime = objLastLogon.HighPart * (2^32) + objLastLogon.LowPart
    intLastLogonTime = intLastLogonTime / (60 * 10000000)
    intLastLogonTime = intLastLogonTime / 1440

    WScript.Echo "ULTIMO LOGON : " & int(intLastLogonTime + #1/1/1601#)



    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    segunda-feira, 8 de junho de 2009 20:08
  • Olá,

    Rafael,

    Modifique seu script na linha onde tem:

    objCommand.CommandText = _
        "Select Name, Location from 'LDAP://DC=dirap,DC=intraer' " _
            & "Where objectClass='computer'" 

    Altere para

    objCommand.CommandText = _
        "Select Name, DistinguishedName, Location from 'LDAP://DC=dirap,DC=intraer' " _
            & "Where objectClass='computer'" 



    Agora você temo DN do computador, usando:

    DNComputador = objRecordSet.Fields("distinguishedName").Value


    Aí é só usar o script que te passei.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    terça-feira, 9 de junho de 2009 14:25

Todas as Respostas

  • Olá,

    Faça um teste com o script abaixo:



    Set oADSystemInfo = CreateObject("ADSystemInfo")
    strDefaultDN = oADSystemInfo.username

    strDN = InputBox("Coloque o DN do usuario" & _
        vbCrLf & "Exemplo " & strDefaultDN , , strDefaultDN )

    If strDN = "" Then WScript.Quit(1)        'user clicked Cancel

    Set objUser = GetObject("LDAP://" & strDN)
    Set objLastLogon = objUser.Get("lastLogon")
    intLastLogonTime = objLastLogon.HighPart * (2^32) + objLastLogon.LowPart
    intLastLogonTime = intLastLogonTime / (60 * 10000000)
    intLastLogonTime = intLastLogonTime / 1440

    WScript.Echo "ULTIMO LOGON : " & int(intLastLogonTime + #1/1/1601#)



    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    segunda-feira, 8 de junho de 2009 20:08
  • Bom dia Jesiel...
    Esse script ficou ótimo, mas não teria como eu só entrar com o nome da estação sem especificar o DN completo? Pois eu estou querendo embutir esse script em um outro onde eu coloco as iniciais da estação, o script pesquisa no AD todas as estações que começam com aquelas iniciais e me retorna uma por uma me dando a opção de escolher com qual quero trabalhar e nessa situação é comum as estações estarem em uma ou outra OU. Então caso esse script acima já funcionasse a partir do nome da estação de trabalha seria perfeito.
    Caso não seja possível, vou continuar aqui tentando adequar esse script às minhas necessidades e te agradeço muito o apoio.
    [ ]'s
    terça-feira, 9 de junho de 2009 12:52
  • Olá,

    Você pode passar o seu script aqui??? Assim podemos trabalhar nele...

    Até mais,

    Jesiel

    terça-feira, 9 de junho de 2009 13:05
  • O problema é que esse script tem quase 2000 linhas, então vou colocar só o início dele:

    Const HKEY_LOCAL_MACHINE = &H80000002
    Const ADS_SCOPE_SUBTREE = 2
    Set dtmConvertedDate = CreateObject("WbemScripting.SWbemDateTime")
    Dim Escolha
    Do While Pesquisa <> 7
    Escolha = Inputbox("Tecle 1 para pesquisar usúários ou 2 para computadores." ,"Escolher Pesquisa")
    If Escolha = "" Then
    WScript.Quit
    End If
    Select Case Escolha
    Case "1" 'Usuário
    Set objShell = CreateObject("WScript.Shell")
    objShell.Run "d:\Scripts\Operacionais\CaseUser.vbs"
    WScript.Quit

    Case "2" 'Computadores
    strComputer2 = Inputbox("Digite O Nome do Computador","Analisar Computador")
    If strComputer2 = "" Then
    msgbox "Computador Inválido - Script Finalizado",4096 + 64 + 0,"Analisar Computador"
        WScript.Quit
    End If

    strComputer = UCase ( "" & strComputer2 &"" )
    Computername = Len(""& strComputer &"")
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCOmmand.ActiveConnection = objConnection
    objCommand.CommandText = _
        "Select Name, Location from 'LDAP://DC=dirap,DC=intraer' " _
            & "Where objectClass='computer'" 
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst

    Do Until objRecordSet.EOF
     Computername2 = Left (""& objRecordSet.Fields("Name").Value &"",""& Computername &"")
     
      If Computername2 = strComputer Then

      r = r+1
      If msgbox (("" & objRecordSet.Fields("Name").Value & "") & vbCrLf & "É esse o computador que deseja pesquisar? Clique em não para pesquisar o próximo computador",vbyesno,"Computador Encontrado")=vbyes Then
    Computador = objRecordSet.Fields("Name").Value
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set colItems = objWMIService.ExecQuery _
        ("Select * from Win32_PingStatus " & _
            "Where Address = '" & objRecordSet.Fields("Name").Value & "'")
            WScript.Sleep 1000
    For Each objItem in colItems
     If objItem.StatusCode = 0 Then
        h=0
        Else
        msgbox "Computador Inacessível",4096 + 64 + 0,"Analisar Computador"
        WScript.Quit
        End If
    Next


    Nesse caso só estou considerando a opção computadores. Após eu encontrar o computador desejado e responder sim o script faz um ping para o computador escolhido e caso ele esteja acessível faz uma série de verificações que eu suprimi do script.
    Mas esse script que você me passou eu quero justamente inserir quando ele não conseguir obter êxito no ping. Aí ao invés de ele me retornar somente que o computador está inacessível, ele também me mostraria quando foi o último logon da estação.

    terça-feira, 9 de junho de 2009 13:25
  • Olá,

    Rafael,

    Modifique seu script na linha onde tem:

    objCommand.CommandText = _
        "Select Name, Location from 'LDAP://DC=dirap,DC=intraer' " _
            & "Where objectClass='computer'" 

    Altere para

    objCommand.CommandText = _
        "Select Name, DistinguishedName, Location from 'LDAP://DC=dirap,DC=intraer' " _
            & "Where objectClass='computer'" 



    Agora você temo DN do computador, usando:

    DNComputador = objRecordSet.Fields("distinguishedName").Value


    Aí é só usar o script que te passei.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    terça-feira, 9 de junho de 2009 14:25
  • Excelente!!! Fiz as alterações que você sugeriu e ficou 100%.
    Muito obrigado pela atenção e ajuda!!!
    Abraços
    terça-feira, 9 de junho de 2009 14:40
  • Eu andei olhando esse topico e eu preciso de algo mais simples, imagino eu. Preciso de um script que me traga somente as informações de hostname e ultima data de logon no AD, alguem poderia me ajudar?
    sexta-feira, 24 de julho de 2009 12:43
  • Olá,

    Você precisa fazer consulta do ultimo log on, ou quer gerar um log dos usuários para toda vez que ele logar grave um log???

    Até mais,

    Jesiel
    sexta-feira, 24 de julho de 2009 16:01