Powershell 导出特定的Windows安全事件日志
我需要有关完成PowerShell脚本的帮助,在该脚本中,我可以获取特定的安全事件日志并将其导出到CSV文件。现在我有这条线,Powershell 导出特定的Windows安全事件日志,powershell,event-log,Powershell,Event Log,我需要有关完成PowerShell脚本的帮助,在该脚本中,我可以获取特定的安全事件日志并将其导出到CSV文件。现在我有这条线, Get EventLog-LogName Security 472047224725-After((Get Date).AddDays(-1))|导出CSV“C:\EventLogs.CSV” 这确实得到了我想要的安全事件。然而,它提供的信息是不完整的。输出中不包括这2个 帐户名称-进行更改的帐户 目标帐户-已更改的帐户 是否有办法将上述2项包括在内 我被告知Get W
Get EventLog-LogName Security 472047224725-After((Get Date).AddDays(-1))|导出CSV“C:\EventLogs.CSV”
这确实得到了我想要的安全事件。然而,它提供的信息是不完整的。输出中不包括这2个
我被告知Get WinEvent更适合这样做,但我对PowerShell脚本编写还比较陌生,因此我非常感谢您的帮助。谢谢通常,
导出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
的第一个正则表达式是如何非贪婪的(*?
),这意味着第一个匹配项将匹配,而第二个是贪婪的(*
),这意味着最后一个匹配项将匹配
用空格替换换行符的额外步骤是必要的,因为
-replace
显然总是逐行匹配。Hi。我测试了你的剧本,效果很好!但是,我得到的唯一条目是目标AccountName。您能否包括源/主题帐户名和事件触发的时间?我真的很感谢你的帮助@拉普桑托斯:请看我的更新;这不是解析消息
字段的最健壮的方法,但在您的情况下可能会这样做。请注意,您可以根据需要添加更多标准字段,如源
,只需添加到传递给选择对象
的逗号分隔列表(即,添加到属性名称数组)。