Powershell:如何过滤掉特定的文字?

时间:2013-04-10 17:48:54

标签: powershell

我需要将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

1 个答案:

答案 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]中,因为数组从零开始。所以只计算你的方式。