如何从Get-EventLog
的以下输出中获取“登录失败的帐户”部分的“帐户名称”?我知道它涉及替换字符串,但这只是没有得到它:
Get-EventLog -ComputerName fs2 -Logname security |
? {$_.eventid -eq "4625"} |
select machinename, eventid, @{n='AccountName';e={$_.ReplacementStrings[2]}},
entrytype, message |
Export-Csv 1.csv -NoTypeInformation
示例事件日志条目:
TimeCreated : 5/18/2016 8:55:43 AM ProviderName : Microsoft-Windows-Security-Auditing Id : 4625 Message : An account failed to log on. Subject: Security ID: S-1-5-21-1287344763-2688370722-3395302928-19873 Account Name: service_adfs Account Domain: DOMAIN Logon ID: 0xD62E4 Logon Type: 3 Account For Which Logon Failed: Security ID: S-1-0-0 Account Name: user.thatiwant@DOMAIN.com Account Domain:编辑:不确定他们为什么编辑我的帖子以包含旧版cmdlet,可以使用较新的cmdlet get-winevent。正则表达式对我不起作用。这似乎有用。
get-winevent -computername fs1 -FilterHashtable @{Logname='Security';Id='4625'} |select timecreated, message, machinename, eventid, @{n='AccountName';e={$_.ReplacementStrings[5]}}
答案 0 :(得分:2)
您可以在Message
属性上使用正则表达式:
Account For Which Logon Failed.* Account Name:.+?\b(.*?)\s
在这里你的剧本:
$regex = 'Account For Which Logon Failed.* Account Name:.+?\b(.*?)\s'
get-eventlog -computername fs2 -logname security |
?{$_.eventid -eq "4625"} |
select machinename,eventid,@{n='AccountName';e={[regex]::Match($_.Message,$regex,[System.Text.RegularExpressions.RegexOptions]::Singleline).Groups[1].Value}},entrytype,message |
export-csv 1.csv -NoTypeInformation