【问题标题】:Export windows events to evt file for last 7 days将过去 7 天的 windows 事件导出到 evt 文件
【发布时间】:2021-04-30 01:15:43
【问题描述】:

难以置信,我只花了一个小时在网上搜索,却找不到看似简单的请求的答案。

我要做的就是获取最近 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.Diagnostics.Eventing.Reader.EventLogRecord] 不包含 名为“backupeventlog”的方法。

【问题讨论】:

  • 看起来您只是修改了this 站点上的示例,但您从未定义$logFileName。尝试将其定义为系统日志文件的完整文件路径,看看是否更适合您。
  • 我有,但由于某种原因没有在我的示例中包含它。但我不断收到“您不能在空值表达式上调用方法。”

标签: powershell


【解决方案1】:

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

【讨论】:

  • 似乎我们可以在过滤天数的同时将问题导出到 csv 但不能导出到 evt?必须有办法。我可以将所有事件转换为 evt 格式,因此必须有一种方法可以将其过滤到最后 7 天
  • 我知道您不喜欢这个答案,但 PowerShell 确实无法满足您的要求。您可以使用 wevtutil 来执行此操作,但我不熟悉该过程。检查here 以供参考。
  • 好的,谢谢。我已经确定了 xml 格式如下:get-winevent -FilterHashtable @{LogName="System";level=1,2,3,4,5;starttime=((get-date).AddDays(-7))} | Export-CliXml
猜你喜欢
  • 2020-08-27
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
相关资源
最近更新 更多