Код Powershell для фильтрации времени входа / выхода (id 7001, 42) - PullRequest
1 голос
/ 13 января 2020

Я пытаюсь создать код в Powershell, который будет отслеживать время входа / выхода пользователя с кодами 7001 (вход в систему) и 42 (компьютер переходит в спящий режим), а затем экспортировать его в виде csv.

Моя текущая проблема заключается в том, что иногда пользователь будет входить / выходить из системы в течение дня, но я просто хочу получить самый ранний вход и последний выход, чтобы я мог отслеживать общее количество часов.

Мой текущий код работает, но он получает все события входа / выхода за день, показанные ниже:

   $startDate = (get-date).AddDays(-1)

   $FileName = "Y:\Powershell_ " + $startDate.ToString('MMddyy') + ".csv" 

   $log_time = get-WinEvent -FilterHashtable @{logname='system';id='7001', '42'} 

   $log_time| Select Id, MachineName, Message, TimeCreated | export-csv $FileName 

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 13 января 2020

Вы должны отфильтровать по дню, над которым вы работаете первым.

Поскольку вы можете получить выходные данные a для каждого l oop с параметром, это способ достижения вашей цели:

   $startDate = (get-date).AddDays(-1).GetDateTimeFormats()[0]

   $FileName = "somepath.csv" 

   $log_time = get-WinEvent -FilterHashtable @{logname='system';id='7001', '42'} 

   $daily_events = foreach($event in $log_time)
   {
        if ($event.timecreated.GetDateTimeFormats()[0] -like "*$startDate*"){$event}
   }

   $daily_events | Select Id, MachineName, Message, TimeCreated | export-csv -Path $Filename

Вы можете добавить это, чтобы отслеживать первое и последнее время выполнения:

   #The sort is by default from newer to older

   $first_event = $daily_events[-1].TimeCreated #last element of the array
   $last_event =  $daily_events[0].TimeCreated #first element of the array

   Write-Host "First event was $first_event in and the last event was in $last_event"
0 голосов
/ 13 января 2020

Вы можете использовать Get-Eventlog, чтобы убедиться, что извлекаются только события текущего дня. Оттуда:

$Results =[System.Collections.Generic.List[PSObject]]::new()

$Date = (get-date).Date 
$FirstLogin = Get-EventLog -LogName System -InstanceId 7001  -After $Date -Before $Date.AddDays(1) | Select -Last 1 
$LastLogout = Get-EventLog -LogName System -InstanceId 42 -After $Date -Before $Date.AddDays() -Newest 1

$Results.Add($FirstLogin)
$Results.Add($LastLogout)
$Results | Select Id, MachineName, Message, TimeCreated | export-csv -Path $Filename
...