导出特定 Windows 安全事件日志
Export Specific Windows Security Event Logs
我需要有关完成 PowerShell 脚本的帮助,我可以在其中获取特定的安全事件日志并将其导出到 CSV 文件。目前,我有这条线,
Get-EventLog -LogName Security 4720,4722,4725 -After ((Get-Date).AddDays(-1)) | Export-CSV "C:\EventLogs.csv"
这确实得到了我想要得到的安全事件。但是,它提供的信息是不完整的。它不在输出中包含这 2 个,
- 账户名 - 进行更改的账户
- 目标帐户 - 已更改的帐户
有没有办法包含上面这两个?
有人告诉我 Get-WinEvent 更适合执行此操作,但我对 PowerShell 脚本编写还很陌生,因此非常感谢您的帮助。谢谢
通常,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]+).*', '' }
}, @{
n='TargetAccount';
e={ ($_.message -replace '\n', ' ') -replace '.*account name:\t+([^\s]+).*', '' }
} | Export-Csv 'C:\EventLogs.csv'
注意传递给 -replace
的第一个正则表达式是 非贪婪的 (.*?
),这意味着 第一个 出现将被匹配,而第二个是贪婪的(仅 .*
),这意味着将匹配 last 出现。
用空格替换换行符的额外步骤是必要的,因为 -replace
显然总是逐行匹配。
我需要有关完成 PowerShell 脚本的帮助,我可以在其中获取特定的安全事件日志并将其导出到 CSV 文件。目前,我有这条线,
Get-EventLog -LogName Security 4720,4722,4725 -After ((Get-Date).AddDays(-1)) | Export-CSV "C:\EventLogs.csv"
这确实得到了我想要得到的安全事件。但是,它提供的信息是不完整的。它不在输出中包含这 2 个,
- 账户名 - 进行更改的账户
- 目标帐户 - 已更改的帐户
有没有办法包含上面这两个?
有人告诉我 Get-WinEvent 更适合执行此操作,但我对 PowerShell 脚本编写还很陌生,因此非常感谢您的帮助。谢谢
通常,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]+).*', '' }
}, @{
n='TargetAccount';
e={ ($_.message -replace '\n', ' ') -replace '.*account name:\t+([^\s]+).*', '' }
} | Export-Csv 'C:\EventLogs.csv'
注意传递给 -replace
的第一个正则表达式是 非贪婪的 (.*?
),这意味着 第一个 出现将被匹配,而第二个是贪婪的(仅 .*
),这意味着将匹配 last 出现。
用空格替换换行符的额外步骤是必要的,因为 -replace
显然总是逐行匹配。