Histórico de Login Servidores Windows

Fala galera, tudo beleza?

Hoje vou compartilhar um script que me ajudou muito recentemente.

É muito comum no dia-a-dia da administração de uma rede precisarmos saber quando e por quanto tempo um usuário ficou logado em um servidor.. Nas novas versões do Windows, por padrão vem habilitado a auditoria de login. Este recurso registra em log todos os acessos aos computadores. Porém, os logs do Windows nem sempre são amigáveis e fáceis de entender. Algumas ferramentas terceiras facilitam nossa vida, mais com o poweshell do Windows temos recursos suficientes para encontrarmos o que precisamos.

Powershell

Com o Powershell é possível consultar os logs do Windows e filtrar os resultados para uma melhor visualização e entendimento. Vamos ver a seguir os princípios básicos da nossa consulta.

Segue um exemplo de uma consulta:

Nesta consulta nos conseguimos obter todos os logins efetuados durante os últimos 3 dias. Porém o resultado é praticamente o mesmo que consultar o Event Viewer, normalmente não muito claro para saber o histórico de de login no computador.

Para filtrar e ter uma melhor visualização das informações podemos utilizar outros recursos do Powershell, segue abaixo o código que cria uma função chamada Get-LogonHistory:

PS C:\> function Get-LogonHistory{
Param (
[string]$Computer = (Read-Host Remote computer name),
[int]$Days = 10
)
cls
$Result = @()
Write-Host “Gathering Event Logs, this can take awhile…”
$ELogs = Get-EventLog System -Source Microsoft-Windows-WinLogon -After (Get-Date).AddDays(-$Days) -ComputerName $Computer
If ($ELogs)
{ Write-Host “Processing…”
ForEach ($Log in $ELogs)
{ If ($Log.InstanceId -eq 7001)
{ $ET = “Logon”
}
ElseIf ($Log.InstanceId -eq 7002)
{ $ET = “Logoff”
}
Else
{ Continue
}
$Result += New-Object PSObject -Property @{
Time = $Log.TimeWritten
‘Event Type’ = $ET
User = (New-Object System.Security.Principal.SecurityIdentifier $Log.ReplacementStrings[1]).Translate([System.Security.Principal.NTAccount])
}
}
$Result | Select Time,”Event Type”,User | Sort Time -Descending | Out-GridView
Write-Host “Done.”
}
Else
{ Write-Host “Problem with $Computer.”
Write-Host “If you see a ‘Network Path not found’ error, try starting the Remote Registry service on that computer.”
Write-Host “Or there are no logon/logoff events (XP requires auditing be turned on)”
}
}

Após executar o código acima basta executar a função criada na linha de comando do powershell:

PS C:\> Get-LogonHistory

Será solicitado o nome do computador:

Após inserir nome o PowerShell realizará a coleta dos logs e mostrará o resultado na seguinte tela:

Muito tranquilo de executar e o resultado é mostrado de forma clara, facilitando a informação para alguma auditoria por exemplo.

Até a próxima!!!!

4 Comments

  • O 2º código tem algum erro de execução.

    • Obrigado pelo aviso o Leonardo
      o wordpress acabou inserindo um parâmetro que não faz parte do código
      já fiz o ajuste
      pode tentar usar novamente o código

      • Deu certo agora Eduardo. Muito Obrigado!
        Eu gostaria muito de verificar todos meus históricos de login desde 2020 no meu PC e a informação do IP, você tem algum email de contato? Eu procurei vários artigos na internet mas foi o seu que acho resolve meu problema.

        • Olá Leonardo
          Esse script utiliza os dados armazenados nos eventos de segurança do Windows para trazer as informações.
          Desde 2020 não sei se é possível, devido a quantidade de informações que é armazenada nos eventos de segurança.
          Mais pode tentar alterando a quantidade de dias desejados no inicio do script

Leave a Comment

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Translate »