Jor*_* W. 4 powershell datetime filtering event-log
获取 Event1 后,我需要获取在 Event1之后一段未知时间发生的另一个事件的第一个实例。然后获取在 Event2 之后某个时间发生的 Event3 等。
基本上从以下开始:
$filterXML = @'
<QueryList>
<Query Id="0" Path="System">
<Select Path="System">*[System[Provider[@Name='Microsoft-Windows-Kernel-General'] and (Level=4 or Level=0) and (EventID=12)]]</Select>
</Query>
</QueryList>
'@
$event1=(Get-WinEvent -ComputerName $PCname -MaxEvents 1 -FilterXml $filterXML).timecreated
Run Code Online (Sandbox Code Playgroud)
给我 Event1 的日期时间。然后我想做类似的事情:
Get-WinEvent -LogName "System" -MaxEvents 1 -FilterXPath "*[EventData[Data = 'Windows Management Instrumentation' and TimeCreated -gt $event1 ]]"
显然,时间创建的粗体部分不起作用,但我希望你明白我想要做的事情。有什么帮助吗?
我想也许filterhashtable就是我需要走的路?寻求澄清:
$Event2=(Get-WinEvent -Oldest -MaxEvents 1 -FilterHashtable @{logname="system"; providername="Microsoft-Windows-GroupPolicy"; starttime=$Event1}).TimeCreated
Run Code Online (Sandbox Code Playgroud)
小智 6
这就是你想要的...
$t = (((Get-WinEvent -ComputerName $PCname -MaxEvents 1 -FilterXml $filterXML).TimeCreated).ToUniversalTime()).ToString("s")
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我需要计算机启动的时间,所以做了这样的事情......
$t1 = (((Get-WinEvent -ComputerName "myhostname" -LogName "System" -MaxEvents 1 -FilterXPath "*[System[Provider[@Name='Microsoft-Windows-Kernel-General']][EventID=12]]").TimeCreated).ToUniversalTime()).ToString("s")
Run Code Online (Sandbox Code Playgroud)
或者
$t1 = (($boottime.ConvertToDateTime($boottime.LastBootUpTime)).ToUniversalTime()).ToString("s")
Run Code Online (Sandbox Code Playgroud)
然后
(Get-WinEvent -ComputerName "myhostname" -LogName "Application" -MaxEvents 1 -FilterXPath "*[System[TimeCreated[@SystemTime>'$t1']][EventID=6005]][EventData[Data='Sens' and Data='Logoff']]")|fl
Run Code Online (Sandbox Code Playgroud)
或者
(Get-WinEvent -ComputerName "myhostname" -LogName "Application" -MaxEvents 1 -FilterXPath "*[System[TimeCreated[@SystemTime>'$t1']][EventID=6005]][EventData[Data='Sens' and Data='Logoff']]").Count
Run Code Online (Sandbox Code Playgroud)
小智 6
没有必要将所有内容都塞到一行中:
$t1 = [datetime]::Today.AddDays(-1).ToUniversalTime().ToString('s')
$xpath = @"
*[System[TimeCreated[@SystemTime>'$t1']]
[EventID=4624]]
[EventData[Data='Sens' and Data='Logoff']]
"@
Get-WinEvent -ComputerName myhostname -LogName Security -FilterXPath $xpath -MaxEvents 1
Run Code Online (Sandbox Code Playgroud)