我想弄清楚哪个用户,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与所选数据项相同?
谢谢
彼得
答案 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
节点。如果它们中的任何一个不存在,相应的变量将只是一个空字符串