get-winevent:将部分扩展数据添加到scv-columns

时间:2018-01-30 16:28:19

标签: powershell

我想弄清楚哪个用户,ip,workstationname远程连接到一个站。这可以在eventlog eventid 4624 logontype 10(远程交互,例如rdp)中看到。当这种情况发生时,我需要来自消息字段的一些数据,但只有一些不是全部。

Get-WinEvent -FilterHashtable @{Path="c:\temp\raw_data\SavedSecurity.evtx";} |Where {($_.id -eq "4624" -and $_.properties[8].value -in 10)} |Select-Object -Property TimeCreated, Message |pause

我知道我可以使用提供的代码获取大量数据,也可以使用remote-ip,remoteworkstationname,remoteuserid以及消息字段。

接下来是挑战: 我只想从消息字段中一些数据:

TargetUserName testuser
TargetDomainName testlab.internal 
TargetLogonId 0xb6f45e 
LogonType 7 
WorkstationName testclientwin7 
IpAddress 127.0.0.1 
IpPort 64372

Message: Successful Login

任何想法如何将它们(只有这些字段,而不是其他字段)写入一个csv文件,其中headernames与所选数据项相同?

谢谢

彼得

1 个答案:

答案 0 :(得分:2)

  

任何想法如何将它们(只有这些字段,而不是其他字段)写入一个csv文件,其中headernames与所选数据项相同?

丰盛!

这是最安全的(虽然可能最不明显) - 使用EventPropertySelector

Get-WinEvent -FilterHashtable @{Path="c:\temp\raw_data\SavedSecurity.evtx";} |Where {($_.id -eq "4624" -and $_.properties[8].value -in 10)} |%{
    $SelectorStrings = [string[]]@(
        'Event/EventData/Data[@Name="TargetUserName"]',
        'Event/EventData/Data[@Name="TargetDomainName"]',
        'Event/EventData/Data[@Name="TargetLogonId"]',
        'Event/EventData/Data[@Name="LogonType"]',
        'Event/EventData/Data[@Name="WorkstationName"]',
        'Event/EventData/Data[@Name="IpAddress"]',
        'Event/EventData/Data[@Name="IpPort"]'
    )
    $PropertySelector = [System.Diagnostics.Eventing.Reader.EventLogPropertySelector]::new($SelectorStrings)

    $UserName,$Domain,$LogonId,$LogonType,$ComputerName,$IPAddres,$Port = $_.GetPropertyValues($PropertySelector)

    New-Object psobject -Property @{
        Message      = $_.Message
        UserName     = $UserName
        Domain       = $Domain
        LogonId      = $LogonId
        LogonType    = $LogonType
        ComputerName = $ComputerName
        IPAddres     = $IPAddres
        Port         = $Port
        TimeCreated  = $_.TimeCreated
    }
}

在上面的代码片段中,我们使用XPath位置选择器从Event的XML结构中获取相关的Data节点。如果它们中的任何一个不存在,相应的变量将只是一个空字符串