- 我正在按时间顺序从事件日志中抓取一些事件
- 不想管道到哪里
- 想使用 get-winevent
在我获得 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
给我 Event1 的日期时间。 然后我想做类似的事情:
Get-WinEvent -LogName "System"-MaxEvents 1 -FilterXPath "*[EventData[Data = 'Windows Management Instrumentation' and TimeCreated -gt $event1]]"
显然,在那里加粗的 timecreated 部分不起作用,但我希望你能得到我想要做的事情。有什么帮助吗?
我想也许 filterhashtable 是我需要去的?寻求澄清:
$Event2=(Get-WinEvent -Oldest -MaxEvents 1 -FilterHashtable @{logname="system"; providername="Microsoft-Windows-GroupPolicy"; starttime=$Event1}).TimeCreated
最佳答案
这就是你想要的……
$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")
或
$t1 = (($boottime.ConvertToDateTime($boottime.LastBootUpTime)).ToUniversalTime()).ToString("s")
那么
(Get-WinEvent -ComputerName "myhostname" -LogName "Application" -MaxEvents 1 -FilterXPath "*[System[TimeCreated[@SystemTime>'$t1']][EventID=6005]][EventData[Data='Sens' and Data='Logoff']]")|fl
或
(Get-WinEvent -ComputerName "myhostname" -LogName "Application" -MaxEvents 1 -FilterXPath "*[System[TimeCreated[@SystemTime>'$t1']][EventID=6005]][EventData[Data='Sens' and Data='Logoff']]").Count
关于datetime - PS 将 Get-WinEvent 与 FilterXPath 和日期时间变量一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8979580/