我需要有关完成PowerShell脚本的帮助,在该脚本中我可以获取特定的安全事件日志并将其导出到CSV文件。目前,我有这条线,
Get-EventLog -LogName Security 4720,4722,4725 -After ((Get-Date).AddDays(-1)) | Export-CSV "C:\EventLogs.csv"
这确实可以获得我想要的安全事件。但是,它提供的信息不完整。它不包括输出中的这两个
有没有办法在上面加上这两个?
我被告知Get-WinEvent更适合这样做,但我对PowerShell脚本编写起来相当新,所以我真的很感激一点帮助。谢谢
答案 0 :(得分: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
的第一个正则表达式是非贪婪(.*?
),这意味着第一个匹配项将匹配,而第二个是贪婪的(只是.*
),这意味着 last 出现将匹配。
用空格替换换行符的额外步骤是必要的,因为-replace
显然总是逐行匹配。