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

Windows Server 2016域控制器中精准去重4624/4634登录登出事件并生成单条记录报告的方案咨询

Windows Server 2016域控制器中精准去重4624/4634登录登出事件并生成单条记录报告的方案咨询

我完全理解你的困扰——在Windows Server 2016域控制器上解析4624(登录)和4634(登出)事件时,总会冒出一堆毫秒级重复的记录,直接生成报告的话根本没法看。简单按秒合并确实太粗糙,下面给你几个更精准的去重思路,结合域控制器日志本身的字段就能解决问题:

核心思路1:用Logon ID关联会话,实现精准去重

每个用户的一次有效登录会话,都会对应一个唯一的LogonID(在事件属性里叫「登录ID」),不管是4624还是4634事件,都会携带这个ID来标识同一个会话。重复的事件本质上是同一会话的冗余日志,所以我们可以按这个ID分组去重:

  1. 处理4624登录事件:按LogonID分组,每组只保留最早的那条记录(因为同会话的重复登录事件都是同一触发动作的冗余日志),作为该会话的实际登录时间。
  2. 处理4634登出事件:同样按LogonID分组,每组保留任意一条(通常同ID的登出事件时间完全一致),作为该会话的登出时间。
  3. 配对会话记录:把同LogonID的登录和登出记录关联起来,生成清晰的单条会话报告。

给你一段可参考的PowerShell代码片段:

# 获取并去重4624登录事件:保留每个LogonID的最早记录
$cleanLogons = Get-WinEvent -FilterHashtable @{LogName='Security';ID=4624} | 
    Group-Object LogonID | 
    ForEach-Object { $_.Group | Sort-Object TimeCreated | Select-Object -First 1 }

# 获取并去重4634登出事件:保留每个LogonID的任意一条(这里取最晚的)
$cleanLogoffs = Get-WinEvent -FilterHashtable @{LogName='Security';ID=4634} | 
    Group-Object LogonID | 
    ForEach-Object { $_.Group | Sort-Object TimeCreated -Descending | Select-Object -First 1 }

# 配对登录登出记录,生成格式化报告
foreach ($logon in $cleanLogons) {
    $matchedLogoff = $cleanLogoffs | Where-Object { $_.LogonID -eq $logon.LogonID }
    $user = $logon.Properties[5].Value  # 对应TargetUserName字段
    $ip = $logon.Properties[18].Value   # 对应IpAddress字段
    
    # 输出登录记录
    "$($logon.TimeCreated.ToString('yyyy-MM-dd HH:mm:ss.fff')) - $user logged on to $ip"
    
    # 输出登出记录(如果存在)
    if ($matchedLogoff) {
        "$($matchedLogoff.TimeCreated.ToString('yyyy-MM-dd HH:mm:ss.fff')) - $user logged off."
    } else {
        "--- $user's session is still active (no logoff event found)"
    }
}

核心思路2:过滤非目标登录类型,提前减少冗余

很多重复的4624事件其实是系统服务、后台进程触发的非用户主动登录,你可以通过LogonType字段筛选出你真正关心的登录场景:

  • 类型2:交互式登录(用户本地/控制台登录)
  • 类型10:远程桌面登录
  • 类型3:网络登录(比如访问共享资源,按需保留)

修改筛选条件,提前排除无关日志:

# 只保留交互式和远程桌面登录的4624事件
Get-WinEvent -FilterHashtable @{LogName='Security';ID=4624;Data='2','10'}

补充提示:避免日志丢失导致的配对失败

如果部分登出事件找不到对应的登录LogonID,大概率是域控制器的安全日志被循环覆盖了。你可以调整安全日志的大小和保留策略:

  1. 打开「组策略管理器」,找到计算机配置>Windows设置>安全设置>本地策略>安全选项
  2. 修改「安全日志的最大大小」和「保留安全日志的方法」,确保关键日志不会被过早覆盖

备注:内容来源于stack exchange,提问作者Flash_Steel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 13:13:15