我需要定期从我们的生产环境将 Windows 事件日志导出到 CSV。
我有一个简单的 XML 配置文件,其中包含我需要从中获取事件的机器列表,以及我需要检索的事件 ID 列表。
从这里我依次遍历每台机器名称,然后是每个事件 ID 以检索日志,然后导出到 CSV。我希望每台机器每次执行一个 CSV。
一旦我计算出所有变量,PS 命令就可以很简单地检索一个事件 ID 的日志
foreach ($machine in $config.Configuration.Machines.Machine)
{
$csvname=$outputlocation + $machine.Value + "_" + $datestring + ".csv"
foreach ($eventid in $config.Configuration.EventIds.EventId)
{
Get-WinEvent -ComputerName $machine.Value -ErrorAction SilentlyContinue -FilterHashTable @{Logname='Security';ID=$eventid.Value} | where {$_.TimeCreated -gt $lastexecutiondate} | export-csv -NoClobber -append $csvname
}
}
执行我每次都无法附加到 CSV,PS 2.0 显然不支持这一点。我曾尝试一次提取所有事件 ID,但这似乎有点冗长,现在可能允许使用配置文件,但我对 PowerShell 相当陌生,所以我没有太多运气。
我还需要指定多个 LogNames(系统、安全和应用程序),并且更愿意运行一个语句而不是同一个语句 3 次和应用,但我不确定如何执行此操作。
不幸的是,此时谷歌让我绕着圈子跑。