我需要帮助完成一个PowerShell脚本,在这个脚本中我可以获取特定的安全事件日志并将其导出到CSV文件中。目前,我有这条线,
Get-EventLog -LogName Security 4720,4722,4725 -After ((Get-Date).AddDays(-1)) | Export-CSV "C:\EventLogs.csv"
这确实得到了我想要的安全事件。然而,它提供的资料是不完整的。它不包括这2在输出中,
是否有办法将上述2项内容包括在内?
我被告知Get更适合这样做,但我对PowerShell脚本相当陌生,所以我非常希望得到一点帮助。谢谢
发布于 2016-04-06 04:07:26
一般来说,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的第一个正则表达式是非贪婪的(.*?),这意味着第一个事件将被匹配,而第二个正则表达式是贪婪的(只是.*),这意味着最后一个事件将被匹配。
用空格替换行中断的额外步骤是必要的,因为-replace显然总是逐行匹配。
https://stackoverflow.com/questions/36439494
复制相似问题