如何提取Windows安全日志4625事件中登录失败账户信息?
提取Windows安全日志4625事件中的失败登录账户信息
问题原因
你之前的命令使用了Format-Table,这会将输出转换为格式化的文本对象,而非保留原始事件数据,导致无法有效提取Message字段中的目标内容。必须先完成数据提取,再进行格式化输出。
方法一:直接提取结构化属性(推荐,更可靠)
Windows安全日志的4625事件自带结构化属性,无需解析文本即可获取目标账户信息:
Get-WinEvent -FilterHashTable @{LogName="Security"; ID=4625} | Select-Object TimeCreated, @{Name='失败登录账户名'; Expression={$_.Properties[5].Value}}, @{Name='失败登录账户域'; Expression={$_.Properties[6].Value}} | Format-Table -AutoSize
- 4625事件的
Properties[5]对应TargetUserName(账户名),Properties[6]对应TargetDomainName(账户域),两者共同构成“Account For Which Logon Failed”的内容。
方法二:解析Message字段(适合需匹配文本的场景)
如果需要从Message字段中直接提取,可使用正则表达式:
Get-WinEvent -FilterHashTable @{LogName="Security"; ID=4625} | Select-Object TimeCreated, @{Name='失败登录账户'; Expression={ if ($_.Message -match 'Account For Which Logon Failed:\s*([\s\S]+?)\n\n') { $matches[1].Trim() } }} | Format-Table -Wrap
- 正则表达式会匹配“Account For Which Logon Failed:”后的所有内容,直到遇到连续两个换行符(日志中该部分的结束标记),并去除首尾空白字符。
内容的提问来源于stack exchange,提问作者Stackoverflowuser
相关产品推荐
相关产品推荐

