Script Powershell para descobrir se um usuário fez login desde a última reinicialização

5

Estou trabalhando em um script do Powershell que precisa detectar se um logon interativo ocorreu desde a última reinicialização. Eu posso forçar o sistema a reiniciar antes de iniciar a tarefa, mas gostaria de adicionar algumas informações ao script.

Advertências:

  • Deve usar o Powershell.
  • Não é possível exigir pacotes de energia ou suplementos especiais.
  • Não é possível usar comandos do Active Directory. (No get-qaduser)

Eu sou capaz de obter a última vez que o sistema foi reiniciado:

$date = Get-WmiObject Win32_OperatingSystem | %{$_.LastBootUpTime} 
$RebootTime = [System.DateTime]::ParseExact($date.split(".")[0],'yyyyMMddHHmmss',$null) 

Alguma ideia? Agradecemos antecipadamente

    
por Doltknuckle 26.05.2011 / 20:31

1 resposta

4

Se você estiver usando o WMI, poderá usar LastBootUpTime um pouco mais limpo:

PS C:\> $wmi = Get-WmiObject -Class Win32_OperatingSystem
PS C:\> $rebootTime = $wmi.ConvertToDateTime($wmi.LastBootUpTime)
PS C:\> $rebootTime
Tuesday, May 24, 2011 3:18:28 PM

Fazendo isso, pesquisamos o log de eventos Security , desde $rebootTime , para o mais recente, com êxito , eventID 4624 contendo Logon Type 2 - Logon interativo:

PS C:\> $entry = Get-EventLog -After $rebootTime -LogName Security | Where-Object {($_.EventID -eq '4624') -and ($_.EntryType -eq 'SuccessAudit') -and ($_.Message | Select-String "Logon Type:\t\t\t2")} | Select-Object -First 1
PS C:\> $lastLogon = $entry.TimeGenerated
PS C:\> $lastLogon
Tuesday, May 24, 2011 3:19:34 PM

Em seguida, compare rapidamente:

PS C:\> $lastLogon -gt $rebootTime
True

O código acima pode ser despejado em um script e / ou executado em um computador remoto. Eu só executei os comandos interativamente para demonstrar o resultado do exemplo.

    
por 26.05.2011 / 21:30