none
Script puxar eventos RRS feed

  • Pergunta

  • Salve Technet.

    Boa tarde a todos. Pessoal alguém ai sabe me dizer se consigo fazer um VBA que puxe os eventos de logon do Windows?

    Abraços.


    Victor R. Petroveski Gestor de TI

    quinta-feira, 5 de abril de 2012 16:29

Respostas

  • Victor,

    Você não deve ler diretamente no arquivo, vc deve utilizar o WMI.

    Veja um exemplo para ler os logs de segurança (para colocar no Excel retire os wscript e coloque no lugar código para escrever em células)

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate,(Security)}!\\" & _
            strComputer & "\root\cimv2")
    Set colLoggedEvents = objWMIService.ExecQuery _
        ("Select * FROM Win32_NTLogEvent WHERE Logfile = 'Security'" )
    
    For Each objEvent in colLoggedEvents
        Wscript.Echo "==================================================="
        Wscript.Echo "Category: " & objEvent.Category
        Wscript.Echo "Computer Name: " & objEvent.ComputerName
        Wscript.Echo "Event Code: " & objEvent.EventCode
        Wscript.Echo "Message: " & objEvent.Message
        Wscript.Echo "Record Number: " & objEvent.RecordNumber
        Wscript.Echo "Source Name: " & objEvent.SourceName
        Wscript.Echo "Time Written: " & objEvent.TimeWritten
        Wscript.Echo "Event Type: " & objEvent.Type
        Wscript.Echo "User: " & objEvent.User
        Wscript.Echo
    Next

    Vc pode adicionar filtro para retornar apenas determinado evento, ou apenas de uma data em diante, etc

    Obs.: Para ler o log de segurança vc deve executar este código como administrador da estação (mais este problema pra vc, porque o usuário que vai usar a planilha é administrador? Então já indico novamente aquela solução do login script).

    Links:
    Hey, Scripting Guy! Can I Retrieve Just Failure Events from the Security Event Log?

    http://blogs.technet.com/b/heyscriptingguy/archive/2004/10/26/hey-scripting-guy-can-i-retrieve-just-failure-events-from-the-security-event-log.aspx


    Fábio de Paula Junior

    quarta-feira, 18 de abril de 2012 16:24
    Moderador
  • é o Windows Management Instrumentation, com ele vc consegue acessar várias informações do Windows e configurar\alterar dados.

    Neste script que enviei eu consulto a classe Win32_NTLogEvent, esta classe fornece meios de acessar os logs do windows.

    Windows Management Instrumentation

    http://msdn.microsoft.com/en-us/library/windows/desktop/aa394582(v=vs.85).aspx


    Fábio de Paula Junior


    quarta-feira, 18 de abril de 2012 17:21
    Moderador

Todas as Respostas

  • Victor,

    Pelo fato de ser VBA imagino que você queria dentro do Excel consultar os eventos e salvar diretamente na planilha, certo? 

    Caso esse seja o caso acho que não seja possível, ou pelo menos não com facilidade. No seu caso eu acho mais fácil um Script em Powershell que lê os eventos que você quer e crie uma planilha do Excel usando objetos COM. O resultado final seria o mesmo, ou até com algumas coisas mais fáceis de implementar.

    Se for esse o caso avise aqui que eu posto um script de como fazer isso.

    quinta-feira, 5 de abril de 2012 18:11
  • Então o que queria era pegar os eventos de logon dos usuarios e jogar para uma planilha, afim do RH ver, os periodo de inicio de trabalho.

    Victor R. Petroveski Gestor de TI

    quinta-feira, 5 de abril de 2012 19:24
  • Acredito que esse post deve te ajudar.


    http://social.technet.microsoft.com/Forums/pt-BR/scriptadminpt/thread/48561ec9-837d-472d-89ca-79e90cbedc1b




    Rafael S. AMARAL
    U. P. Mackenzie


    sexta-feira, 6 de abril de 2012 14:35
  • Primeiramente obrigado Rafael, é nessa linah porém queria jogar para fazer uma MACRO no excel, ai automaticamente ia jogar para uma planilha, assim ia saber que horas que o usuario logou na rede.

    Victor R. Petroveski Gestor de TI

    segunda-feira, 9 de abril de 2012 19:32
  • Boa Tarde Victor,

    Eu tenho um que você executa e informa de todos os usuários. Já formatado em CSV. Veja se te ajuda. Nesse caso você não precisa jogar no script de logon do usuário.

    Const ForWriting = 2
    
    
    On Error Resume Next
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    
    strOU = "DC=xxx,DC=xxx,DC=xxx"
    
    strFileName = "\\XXX\XXX\output.csv"
    Set objLogFile = objFSO.CreateTextFile(strFileName, ForWriting)
    objLogFile.WriteLine "DN" & vbTab & "CN" & vbTab & "Description" _
      & vbTab & "LastLogOnTimeStamp"
    
    Set objConnection = CreateObject("ADODB.Connection")
    objConnection.Open "Provider=ADsDSOObject;"
    
    Set objCommand = CreateObject("ADODB.Command")
    objCommand.ActiveConnection = objConnection
    objCommand.Properties("Page Size") = 1000
    
    objCommand.CommandText = _
      "<LDAP://" & strOU & ">;" & "(&(objectclass=user)(objectcategory=person));" & _
      "adspath,distinguishedname,sAMAccountName;subtree"
    Set objRecordSet = objCommand.Execute
    
    Do Until objRecordSet.EOF
      Set objUser = GetObject(objRecordSet.Fields("adspath").Value)
      Set objLastLogon = objUser.Get("lastLogonTimestamp")
    
      intLastLogonTime = objLastLogon.HighPart * (2^32) + objLastLogon.LowPart
      intLastLogonTime = intLastLogonTime / (60 * 10000000)
      intLastLogonTime = intLastLogonTime / 1440
    
      objLogFile.WriteLine objuser.Get("distinguishedname") & vbTab _
        & objuser.Get("sAMAccountName") & vbTab _
        & objuser.Get("description") & vbTab _
        & intLastLogonTime + #1/1/1601#
    
      objRecordSet.MoveNext
    Loop
    
    objRecordSet.Close
    Set objRecordSet = Nothing
    Set objCommand = Nothing
    objConnection.Close
    Set objConnection = Nothing
    objLogFile.Close


    Rafael S. AMARAL
    U. P. Mackenzie


    segunda-feira, 9 de abril de 2012 20:25
  • Eu consigo um que somente capture os eventos, eu quero capturar o evento de logon da propria maquina do usuario, não do server.

    Ou seja, eu iria capturar este evendo e ia jogar pro exemplo no Excel ou em um sistema que possa desenvolver.


    Victor R. Petroveski Gestor de TI

    quinta-feira, 12 de abril de 2012 13:29
  • Alguma idéia?

    Victor R. Petroveski Gestor de TI

    segunda-feira, 16 de abril de 2012 16:14
  • Puxar de cada máquina vai dar muito trabalho.

    Qual é o sistema operacional da máquina dos seus usuários?

    Sugestões:

    Se for tudos Windows Vista ou superior: Crie assinaturas para enviar o log para um só servidor então vc lê o log de apenas um lugar.

    Se for inferior ao Vista:

    1) Fazer a macro que busca todos os computadores da rede :-( buscando o log , vc pode utilizar WMI dentro da MACRO

    outra opção (gosto mais)

    2) Adicionar\criar um script de logon que grava em um arquivo texto na rede o nome da máquina, usuário e horário que ele está fazendo o logon. Aqui no fórum tem exemplos deste script, tendo este arquivo fica ainda mais fácil importar para o excel.


    Fábio de Paula Junior

    quarta-feira, 18 de abril de 2012 13:32
    Moderador
  • Ola Fabio.

    Então a intenção é a seguinte:

    1 - Usuario vai abrir diariamente uma planilha na estação de trabalho.

    2 - Ao abrir a planilha ele vai puxar do log da maquina dele o horario de logon.


    Victor R. Petroveski Gestor de TI

    quarta-feira, 18 de abril de 2012 15:28
  • Vitor,

    Vc já sabe qual o código do evento?

    Poste aqui um exemplo. Capture a tela ou copie o todo o código do evento.


    Fábio de Paula Junior

    quarta-feira, 18 de abril de 2012 15:30
    Moderador
  • Fabio, obrigado pelo apoio até então.

    Então seria muito bom se eu soubesse aonde ficam esses logs tambem, digo nos arquivos de texto mesmo.

    - System 
    
      - Provider 
    
       [ Name]  Microsoft-Windows-Security-Auditing 
       [ Guid]  {54849625-5478-4994-A5BA-3E3B0328C30D} 
     
       EventID 4648 
     
       Version 0 
     
       Level 0 
     
       Task 12544 
     
       Opcode 0 
     
       Keywords 0x8020000000000000 
     
      - TimeCreated 
    
       [ SystemTime]  2012-04-18T11:07:00.416310700Z 
     
       EventRecordID 94237 
     
       Correlation 
     
      - Execution 
    
       [ ProcessID]  660 
       [ ThreadID]  744 
     
       Channel Security 
     
       Computer NTVICTOR 
     
       Security 
     
    
    - EventData 
    
      SubjectUserSid S-1-5-18 
      SubjectUserName NTVICTOR$ 
      SubjectDomainName WORKGROUP 
      SubjectLogonId 0x3e7 
      LogonGuid {00000000-0000-0000-0000-000000000000} 
      TargetUserName Victor 
      TargetDomainName NTVICTOR 
      TargetLogonGuid {00000000-0000-0000-0000-000000000000} 
      TargetServerName localhost 
      TargetInfo localhost 
      ProcessId 0x2fc 
      ProcessName C:\Windows\System32\winlogon.exe 
      IpAddress 127.0.0.1 
      IpPort 0 
    

    


    Victor R. Petroveski Gestor de TI

    quarta-feira, 18 de abril de 2012 15:46
  • Victor,

    Você não deve ler diretamente no arquivo, vc deve utilizar o WMI.

    Veja um exemplo para ler os logs de segurança (para colocar no Excel retire os wscript e coloque no lugar código para escrever em células)

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate,(Security)}!\\" & _
            strComputer & "\root\cimv2")
    Set colLoggedEvents = objWMIService.ExecQuery _
        ("Select * FROM Win32_NTLogEvent WHERE Logfile = 'Security'" )
    
    For Each objEvent in colLoggedEvents
        Wscript.Echo "==================================================="
        Wscript.Echo "Category: " & objEvent.Category
        Wscript.Echo "Computer Name: " & objEvent.ComputerName
        Wscript.Echo "Event Code: " & objEvent.EventCode
        Wscript.Echo "Message: " & objEvent.Message
        Wscript.Echo "Record Number: " & objEvent.RecordNumber
        Wscript.Echo "Source Name: " & objEvent.SourceName
        Wscript.Echo "Time Written: " & objEvent.TimeWritten
        Wscript.Echo "Event Type: " & objEvent.Type
        Wscript.Echo "User: " & objEvent.User
        Wscript.Echo
    Next

    Vc pode adicionar filtro para retornar apenas determinado evento, ou apenas de uma data em diante, etc

    Obs.: Para ler o log de segurança vc deve executar este código como administrador da estação (mais este problema pra vc, porque o usuário que vai usar a planilha é administrador? Então já indico novamente aquela solução do login script).

    Links:
    Hey, Scripting Guy! Can I Retrieve Just Failure Events from the Security Event Log?

    http://blogs.technet.com/b/heyscriptingguy/archive/2004/10/26/hey-scripting-guy-can-i-retrieve-just-failure-events-from-the-security-event-log.aspx


    Fábio de Paula Junior

    quarta-feira, 18 de abril de 2012 16:24
    Moderador
  • O que seria o WMI?

    Desulpa cara não estou ligando esta sigla.


    Victor R. Petroveski Gestor de TI

    quarta-feira, 18 de abril de 2012 16:57
  • é o Windows Management Instrumentation, com ele vc consegue acessar várias informações do Windows e configurar\alterar dados.

    Neste script que enviei eu consulto a classe Win32_NTLogEvent, esta classe fornece meios de acessar os logs do windows.

    Windows Management Instrumentation

    http://msdn.microsoft.com/en-us/library/windows/desktop/aa394582(v=vs.85).aspx


    Fábio de Paula Junior


    quarta-feira, 18 de abril de 2012 17:21
    Moderador