Modificando o script para capturar os tempos de login / desligamento no Windows

0

Há algum tempo venho usando esse script para visualizar meu tempo de login em um determinado computador:

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile("C:\Windows\setupact.log")
Wscript.Echo "Log on today at " & FormatDateTime(objFile.DateLastModified,vbShortTime)

Este é um computador com Windows 7 Enterprise Edition com o Service Pack 1 instalado. Está ligado a um domínio e não consigo alterar a política de grupo.

É possível modificar o script para capturar o login e o tempo de desligamento? E, em caso afirmativo, é possível capturar isso por um período definido (por exemplo, para a semana anterior ou para os 28 dias anteriores)? O script não precisa necessariamente armazenar / salvar essa informação - eu posso viver apenas com a possibilidade de visualizá-la.

Eu também encontrei este pergunta , mas isso não me ajudou muito (além do fato de que abriu meus olhos para o Visualizador de Eventos.

Desde então, descobri que posso visualizar manualmente as informações necessárias, visualizando vários logs no Visualizador de Eventos, mas não tenho certeza se há alguma maneira de aproveitar essas informações em um script ou não. Obviamente, essa informação deve ser 'armazenada' em algum lugar do sistema, mas não tenho certeza de onde e se ela está acessível.

Qualquer sugestão seria muito apreciada.

    
por Monomeeth 20.04.2016 / 01:30

1 resposta

0

Encontrei um script que pode atender às suas necessidades:

Option Explicit

Dim strComputer, objWMIService, colEvents, objEvent
Dim dtmStart, dtmEnd, strUser

strComputer = "West204"
dtmStart = "20091228000000.000000-360"
dtmEnd = "20100101000000.000000-360"
strUser = "MyDomain\jsmith"
strUser = "jsmith"

Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate,authenticationLevel=Pkt,(Security)}!\" _ 
    & strComputer & "\root\cimv2") 

Set colEvents = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_NTLogEvent WHERE Logfile = 'Security' AND " _
        & "TimeWritten >= '" & dtmStart & "' AND TimeWritten < '" _
        & dtmEnd & "' AND " _
        & "(EventCode = '528' OR EventCode = '540' OR EventCode = '538')")

For Each objEvent In colEvents
    Wscript.Echo "---------------------------"
    Wscript.Echo "Computer: " & objEvent.ComputerName
    Wscript.Echo "Event Code: " & objEvent.EventCode
    Wscript.Echo "Message: " & objEvent.Message
    Wscript.Echo "Time: " & objEvent.TimeWritten
    Wscript.Echo "Event Type: " & objEvent.EventType
    Wscript.Echo "User: " & objEvent.User
Next

Basta substituir as strComputer , dtmStart , dtmEnd , strUser e strUser pelas suas informações.

These queries are always slow. I tried to add a WHERE clause for the user, but could not get it to work, so the output will include all logon/logoff events between the dates. I also expected more WHERE clauses to make the query faster, but it doesn't seem to work that way. Run the script at a command prompt and redirect the output to a text file. The date format is yyyymmddhhmmss.ssssss-zzz, were -zzz is your local time zone bias in minutes (from UTC)

source

    
por 20.04.2016 / 12:12