导出特定的 Windows 安全事件日志

问题描述 投票:0回答:2

我需要帮助来完成 PowerShell 脚本,在该脚本中我可以获取特定的安全事件日志并将其导出到 CSV 文件。目前,我有这条线,

Get-EventLog -LogName Security 4720,4722,4725 -After ((Get-Date).AddDays(-1)) | Export-CSV "C:\EventLogs.csv"

这确实获得了我想要获得的安全事件。然而,它提供的信息并不完整。它的输出中不包括这 2 个,

  1. 帐户名称 - 进行更改的帐户
  2. 目标帐户 - 已更改的帐户

有没有办法包含上面这2个?

我被告知 Get-WinEvent 更适合执行此操作,但我对 PowerShell 脚本相当陌生,因此我非常感谢您的帮助。谢谢你

powershell event-log
2个回答
2
投票

一般来说,

Export-Csv
会:

  • 查看第一个输入对象
  • 检查其类型并根据该类型具有的所有属性确定要导出的列。

但是,在您的情况下,听起来感兴趣的信息可能包含在类型的 Message 属性中。


因此,您必须使用带有精心设计的哈希表的中间

Select-Object

调用,以便将感兴趣的信息提取为单独的属性,然后

Export-Csv
将导出:

以下示例从

Message

属性中提取帐户名称并将其导出为单独的列:


Get-EventLog -LogName Security 4720,4722,4725 -After ((Get-Date).AddDays(-1)) | Select-Object EventId, Time, @{ n='AccountName'; e={ ($_.message -replace '\n', ' ') -replace '.*?account name:\t+([^\s]+).*', '$1' } }, @{ n='TargetAccount'; e={ ($_.message -replace '\n', ' ') -replace '.*account name:\t+([^\s]+).*', '$1' } } | Export-Csv 'C:\EventLogs.csv'

注意传递给 
-replace

的第一个正则表达式是

non-greedy
(.*?),这意味着第一个
出现将被匹配,而第二个正则表达式是贪婪的(只是 
.*),这意味着最后一个
出现将被匹配。
用空格替换换行符的额外步骤是必要的,因为 -replace

显然总是逐行匹配。


这是否会将安全事件日志中前 50 个条目的输出发送到文本文件?

0
投票

© www.soinside.com 2019 - 2024. All rights reserved.