我需要将Windows安全事件日志导出到CSV文件,以便快速审核已删除的文件。我只需要在CSV文件中特定的信息行,特别是在“消息”字段中。我的命令如下:
Get-EventLog "Security" -before 4/10/2013 -InstanceId 4663 | select-object Index,TimeGenerated,Message | export-csv c:\export.csv
输出如下:
Index : 244336
TimeGenerated : 4/9/2013 6:06:33 PM
Message : An attempt was made to access an object.
Subject:
Security ID: S-0-0-00-0000000-0000000-000000
37-1111
Account Name: joeblow
Account Domain: contoso
Logon ID: 0x888210
Object:
Object Server: Security
Object Type: File
Object Name: C:\files\Important_doc.xls
Handle ID: 0x2178
Process Information:
Process ID: 0x4
Process Name:
Access Request Information:
Accesses: %%1537
Access Mask: 0x10000
我需要的只是Index,TimeGenerated,Message-> accountname,Message-> object-> objectname和Message->对象类型。如何将其过滤掉,以便它看起来像下面的内容,或者在CSV中足够干净以便在Excel中查看?
Index : 244336
TimeGenerated : 4/9/2013 6:06:33 PM
Account name : joeblow
Object type : File
Object Name : c:\files\Important_doc.xls
答案 0 :(得分:2)
我现在没有实验室来测试该条目,但试试这个:
Get-EventLog "Security" -before 4/10/2013 -InstanceId 4663 | % {
New-Object psobject -Property @{
Index = $_.Index
TimeGenerated = $_.TimeGenerated
"Account Name" = $_.ReplacementStrings[1]
"Object Type" = $_.ReplacementStrings[5]
"Object Name" = $_.ReplacementStrings[6]
}
} | export-csv c:\export.csv -NoTypeInformation
在EventLogEntry
- 对象中,有一个属性ReplacementStrings
,它通常包含消息中使用的所有变量,按照它们在文本中显示的顺序。该消息中的第一个变量是“安全ID”,因此很可能存储在$_.ReplacementStrings[0]
中,因为数组从零开始。所以只计算你的方式。