我需要帮助来完成 PowerShell 脚本,在该脚本中我可以获取特定的安全事件日志并将其导出到 CSV 文件。目前,我有这条线,
Get-EventLog -LogName Security 4720,4722,4725 -After ((Get-Date).AddDays(-1)) | Export-CSV "C:\EventLogs.csv"
这确实获得了我想要获得的安全事件。然而,它提供的信息并不完整。它的输出中不包括这 2 个,
有没有办法包含上面这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]+).*', '$1' }
}, @{
n='TargetAccount';
e={ ($_.message -replace '\n', ' ') -replace '.*account name:\t+([^\s]+).*', '$1' }
} | Export-Csv 'C:\EventLogs.csv'
注意传递给
-replace
的第一个正则表达式是
non-greedy(
.*?
),这意味着第一个出现将被匹配,而第二个正则表达式是贪婪的(只是
.*
),这意味着最后一个出现将被匹配。用空格替换换行符的额外步骤是必要的,因为
-replace
显然总是逐行匹配。这是否会将安全事件日志中前 50 个条目的输出发送到文本文件?