PowerShell导出安全事件4740 XML至CSV无法提取指定用户名问题
问题说明
需要从Windows安全事件日志(事件ID 4740,账号锁定事件)的XML视图中提取两个特定字段:
- Target username(目标用户名,示例值BRSYSAD)
- Subject username(主题用户名,示例值900011-LT)
原有脚本直接读取$eventXml.EventData.Data会返回所有EventData节点的集合,无法单独提取指定字段的值。
修正后脚本
$filter = "*[System[EventID=4740 and Provider[@Name='Microsoft-Windows-Security-Auditing']]]" $result = Get-WinEvent -LogName Security -FilterXPath $filter | ForEach-Object { # 将事件内容转换为XML格式,选取Event根节点 $eventXml = ([xml]$_.ToXml()).Event # 组装需要导出的字段 [PSCustomObject]@{ EventID = $eventXml.System.EventID.'#text' TimeCreated = $eventXml.System.TimeCreated.SystemTime -replace '\.\d+.*$' Computer = $eventXml.System.Computer SubjectUserName = ($eventXml.EventData.Data | Where-Object Name -eq 'SubjectUserName').'#text' TargetUserName = ($eventXml.EventData.Data | Where-Object Name -eq 'TargetUserName').'#text' } } # 控制台以自适应表格格式输出结果 $result | Format-Table -AutoSize # 结果导出为CSV文件,指定UTF8编码避免乱码 $result | Export-Csv -Path 'C:\MyProgr_Events_302.csv' -NoTypeInformation -Encoding UTF8
关键修改点
- 移除原有脚本中直接读取全部Data节点的
Data = $eventXml.EventData.Data配置 - 新增按Data节点
Name属性筛选的逻辑,精准匹配SubjectUserName和TargetUserName两个字段的取值 - 导出CSV时追加
-Encoding UTF8参数,解决默认编码导致的非英文字符乱码问题
内容的提问来源于stack exchange,提问作者Arunkumar
相关产品推荐
相关产品推荐

