You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell导出事件日志转HTML时属性表头行缺失问题

问题原因

当前脚本存在两处逻辑错误,直接导致导出的HTML表格缺失属性表头:

  • ConvertTo-Html 命令被错误放置在foreach循环内部,命令执行时$teste变量还处于赋值过程中,只能拿到零散的不完整数据,无法生成包含表头的完整表格结构
  • 循环内手动拼接输出的逗号分隔字符串,会和循环中零散生成的HTML片段混杂在一起,直接破坏最终输出文件的HTML结构
修正方法

调整代码执行顺序:foreach循环只负责构造结构化的事件自定义对象,所有事件对象全部收集完成后,再统一调用一次ConvertTo-Html完成格式转换,不要在循环内部做格式转换、输出无关内容。如果需要同时导出逗号分隔的CSV文件,直接使用内置的Export-Csv命令即可,无需手动拼接字符串,避免格式错误。

修正后的完整可运行脚本:

# 拉取安全日志中ID为4663的事件
$event0 = Get-WinEvent -FilterHashTable @{Logname = 'Security'; ID = 4663 }
# 过滤AccessMask值为65536的事件条目
$events = $event0 | Where-Object { $_.Properties[9].Value -eq 65536 }

# 循环构造结构化事件对象,不做任何格式转换操作
$eventList = foreach ($event in $events) {
    [PSCustomObject]@{
        TimeCreated = $event.TimeCreated
        EventID     = $event.Id
        User        = $event.Properties[1].Value
        Domain      = $event.Properties[2].Value
        LoginID     = $event.Properties[3].Value
        ObjectName  = $event.Properties[6].Value
        HandleID    = $event.Properties[7].Value
        ProcessName = $event.Properties[11].Value
        AccessMASK  = $event.Properties[9].Value
    }
}

# 所有事件对象收集完成后,统一生成带标准表头的HTML内容
$htmlContent = $eventList | ConvertTo-Html -Property TimeCreated, EventID, User, Domain, LoginID, ObjectName, HandleID, ProcessName, AccessMASK
# 将HTML内容写入输出文件
$htmlContent | Out-File -FilePath "Rel.html" -Encoding UTF8

# 如需同步导出CSV格式文件,取消注释下面行即可
# $eventList | Export-Csv -Path "Rel.csv" -NoTypeInformation -Encoding UTF8

执行修正后的脚本,生成的Rel.html文件会自动在表格首行展示各列对应的属性名称表头,和下方的事件条目数据一一对应。


内容的提问来源于stack exchange,提问作者Bryan Almeida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 06:57:22