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

如何为Get-WinEvent输出的Properties匹配系统日志中的属性名称?

让Terminal Services Gateway日志属性显示对应系统名称的方法

你执行了以下PowerShell命令导出Terminal Services Gateway的操作日志:

Get-WinEvent -FilterHashTable @{LogName='Microsoft-Windows-TerminalServices-Gateway/Operational'; Id=307,302,303; StartTime='01.11.2022 0:00:01'} | Select-Object TimeCreated, ID, Message, Properties | Format-Table -AutoSize | Export-Clixml xml.xml

但导出的XML里Properties字段仅显示无命名的Value,示例如下:

<Obj RefId="19">
                <TNRef RefId="2" />
                <ToString>System.Diagnostics.Eventing.Reader.EventProperty</ToString>
                <Props>
                  <S N="Value">6280</S>
                </Props>
              </Obj>

想要让这些属性显示系统日志里对应的名称,按下面的方法操作:

解决步骤

问题根源是Get-WinEvent返回的事件对象中,Properties只是无命名的值集合,要拿到系统定义的属性名称,得读取事件的元数据模板,把值和名称配对起来。直接用下面的修改版命令即可:

Get-WinEvent -FilterHashTable @{LogName='Microsoft-Windows-TerminalServices-Gateway/Operational'; Id=307,302,303; StartTime='01.11.2022 0:00:01'} | ForEach-Object {
    # 生成属性名称与值的映射表
    $namedProps = [ordered]@{}
    for ($i=0; $i -lt $_.Properties.Count; $i++) {
        # 从事件元数据里拿属性名称
        $propName = $_.EventRecordFormat.Properties[$i].Name
        $namedProps[$propName] = $_.Properties[$i].Value
    }
    # 输出包含命名属性的自定义对象
    [PSCustomObject]@{
        TimeCreated = $_.TimeCreated
        ID = $_.Id
        Message = $_.Message
        NamedProperties = $namedProps
    }
} | Export-Clixml xml_with_named_props.xml

关键说明

  • $_.EventRecordFormat.Properties里存着系统日志为该事件ID定义的所有属性名称,通过索引遍历就能把Properties里的值和名称一一对应,生成带名称的哈希表。
  • 别再用Format-Table了,它会把原始对象转成格式化后的文本对象,破坏属性结构,直接导出自定义对象才能保留完整的命名属性信息。
  • 导出的XML里,NamedProperties会以键值对形式展示每个属性的名称和对应值,和你在系统日志里看到的完全一致。

内容的提问来源于stack exchange,提问作者Andrei Lyashko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:15:27