2017-09-01 80 views
0

而不是使用正则表达式,我可以检索事件日志条目文本的消息块中的子字符串?事件日志条目消息块检索值

这是文本块的样子:

Kerberos pre-authentication failed. 

Account Information: 
    Security ID:  HO\administrators$ 
    Account Name:  administrators$ 

Service Information: 
    Service Name:  krbtgt/HO.FOSLTD.CO.ZA 

Network Information: 
    Client Address:  ::ffff:10.250.1.12 
    Client Port:  51933 

Additional Information: 
    Ticket Options:  0x40000000 
    Failure Code:  0x18 
    Pre-Authentication Type: 2 

我只想要值的权利:

Account Name 
Client Address, but with out the ::ffff: 
Failure Code 

我的这部分代码返回下面的文字:

$sSecurityID = $Item.SubString($Item.IndexOf("Account Information")) 
$sSecurityID = $sSecurityID.SubString($sSecurityID.IndexOf("Account Name")) 
$sSecurityID = $sSecurityID.TrimStart("Account Name:") 
$sSecurityID = $sSecurityID.Trim() 

输出:

OrtheaE 

Service Information: 
    Service Name:  krbtgt/ho 

Network Information: 
    Client Address:  ::ffff:172.26.50.11 
    Client Port:  20697 

Additional Information: 
    Ticket Options:  0x40810010 
    Failure Code:  0x18 
    Pre-Authentication Type: 2 

回答

0

如何提取日志数据? 您正在查找使用Get-WinEvent时不可用的ReplacementStrings字段。

get-eventlog -computername dc-01 -logname security | ?{$_.eventid -eq "4674"} | 
 
select machinename,eventid,@{n='AccountName';e={$_.ReplacementStrings[1]}},entrytype,message | 
 
convertto-html | out-file c:\test.html

然后,如果那些没有工作,这最肯定会:

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

你会看到,所有值都在你的ReplacementStrings按照它们在文本中显示的顺序排列。该消息中的第一个变量是“安全ID”,因此很可能存储在$ _。ReplacementStrings [0]等中。