在我获得Event1后,我需要获取另一个事件的第一个实例,该事件在事件1之后发生了一段未知的时间。然后抓住在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
告诉我Event1的日期时间。 然后我想做点什么:
Get-WinEvent -LogName“System”-MaxEvents 1 -FilterXPath“* [EventData [Data ='Windows Management Instrumentation'和 TimeCreated -gt $ event1 ]]”
显然,在那里加粗的时间部分没有用,但我希望你能得到我想做的事情。有什么帮助吗?
我想也许filterhashtable是我需要去的?寻求澄清:
$Event2=(Get-WinEvent -Oldest -MaxEvents 1 -FilterHashtable @{logname="system"; providername="Microsoft-Windows-GroupPolicy"; starttime=$Event1}).TimeCreated
答案 0 :(得分:3)
这就是你想要的......
$t = (((Get-WinEvent -ComputerName $PCname -MaxEvents 1 -FilterXml $filterXML).TimeCreated).ToUniversalTime()).ToString("s")
顺便说一句,我需要计算机启动的时间,所以做了类似的事情......
$t1 = (((Get-WinEvent -ComputerName "myhostname" -LogName "System" -MaxEvents 1 -FilterXPath "*[System[Provider[@Name='Microsoft-Windows-Kernel-General']][EventID=12]]").TimeCreated).ToUniversalTime()).ToString("s")
OR
$t1 = (($boottime.ConvertToDateTime($boottime.LastBootUpTime)).ToUniversalTime()).ToString("s")
THEN
(Get-WinEvent -ComputerName "myhostname" -LogName "Application" -MaxEvents 1 -FilterXPath "*[System[TimeCreated[@SystemTime>'$t1']][EventID=6005]][EventData[Data='Sens' and Data='Logoff']]")|fl
OR
(Get-WinEvent -ComputerName "myhostname" -LogName "Application" -MaxEvents 1 -FilterXPath "*[System[TimeCreated[@SystemTime>'$t1']][EventID=6005]][EventData[Data='Sens' and Data='Logoff']]").Count
答案 1 :(得分:2)
没有必要将所有东西都塞在一条线上:
$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