用于过滤登录/注销时间的Powershell代码(ID 7001,42)



我正在尝试在Powershell中创建代码,该代码将使用ID代码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 

提前谢谢你

你必须按你首先工作的日期进行过滤。

由于您可以使用参数捕获每个循环的输出,因此这是实现目标的一种方式:

$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"

您可以使用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

相关内容

  • 没有找到相关文章

最新更新