powershell 将过去7天的windows事件导出到evt文件

xqkwcwgp  于 2023-04-30  发布在  Shell
关注(0)|答案(2)|浏览(140)

很难相信我花了一个小时在网上搜索,却找不到一个似乎是一个简单的请求的答案。
所有我想做的是得到过去7天的Windows系统和应用程序的事件和出口每个到一个特定的文件夹作为evt格式的文件;所以不是CSV或XML。
有没有一种简单的方法可以使用任何版本的powershell只需要几行代码就可以做到这一点?到目前为止,我尝试了Get-WinEvent,Get-EventLog和下面的方法,但它们都没有达到我的要求。
我现在有的是:

$logFileName = "System"
$exportFileName = $logFileName + (get-date -f yyyyMMdd) + ".evt"
$logFile = Get-WmiObject Win32_NTEventlogFile | Where-Object {$_.logfilename -eq $logFileName} | Where-Object {$_.TimeCreated -ge $filterDate}
$logFile.backupeventlog($defaultDest + "\" + "EventLogs\" + $exportFileName) | Out-Null

但由于某种原因,这要么给我一个错误,要么我没有得到任何结果。
现在,这似乎输出了正确的结果:
$logFile = Get-WinEvent -LogName System | Where-Object {$_.TimeCreated -ge $filterDate}
...但是我如何以evt格式导出它?我在上面的例子中尝试了一下,但得到了一个错误:
方法调用失败,因为[System.诊断。Eventing.Reader.EventLogRecord]不包含名为“backupeventlog”的方法。

nwsw7zdq

nwsw7zdq1#

对不起,我没有滚动到你的代码足够远。问题是返回的WMI对象没有$_.TimeCreated属性,所以当您筛选Where-Object {$_.TimeCreated -ge $filterDate}时,它永远不会返回任何东西。该命令与日志文件本身有关,而与日志中的事件无关,因此无法以这种方式删除事件。您必须备份日志,然后以某种方式从备份中删除事件。

rsl1atfo

rsl1atfo2#

这似乎可以毫无错误地导出到evtx,使用ticks的xpath查询(10,000 ticks = 1毫秒)(/ow表示覆盖):

wevtutil.exe epl Security SecurityLog7Days.evtx /q:'*[System[TimeCreated[timediff(@SystemTime) <= 6048000000 ]]]' /ow:true

参考:Exporting Events with Wevtutil Using a Time-Based Query – Cloud Azzurri

[timespan]7.  # note the period

Days              : 7
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 0
Ticks             : 6048000000000
TotalDays         : 7
TotalHours        : 168
TotalMinutes      : 10080
TotalSeconds      : 604800
TotalMilliseconds : 604800000

事后过滤查询:

get-winevent -FilterHashtable @{ path = 'SecurityLog7Days.evtx'; endtime = '3/23' }

相关问题