在域AD服务器上,没有一条命令能直接显示“某某用户正在线”,其核心思路是通过登录会话、SMB连接和事件日志三个维度的数据交叉验证来综合判断用户状态。
为什么域控上看不到像QQ一样的在线列表
很多刚接触AD域管理的IT朋友都会疑惑:域控制器是认证中心,为什么不能像聊天软件那样列出一个在线用户列表?
行业共识认为,AD域的工作机制是“认证后放行”,域控只在用户登录时验证账号密码,验证通过后,后续的资源访问由目标服务器(文件服务器、打印服务器)自行记录,域控本身不会持续维持一个“心跳连接”来盯着每个用户是否还醒着。
这就像酒店前台,客人入住时登记了身份,但前台并不会24小时盯着客人是否在房间里,你只能通过其他方式(比如楼层监控、房间取电记录)来间接判断。
在域控上查看用户在线状态的三大主流方法
针对不同环境和需求,域管理员最常用的有三种途径:PowerShell查询SMB会话、安全事件日志追踪、以及第三方监控工具,以下方法在Windows Server 2016、2019、2026上均适用。
通过PowerShell查询SMB会话(最直接)
如果域用户正在访问域控或文件服务器上的共享文件夹,系统会建立SMB会话,查询这个会话就能定位用户。
适合场景:能接受“访问共享才叫在线”的管理员,域控查看用户是否在线需求中最高频的落地方式。
在域控制器上,以管理员身份打开Windows PowerShell,执行:
Get-SmbSession | Select-Object SessionId, ClientComputerName, ClientUserName, NumOpens
这个命令会列出所有当前的SMB连接,其中ClientUserName就是域账号(格式为域名用户名),ClientComputerName是其电脑IP或主机名。
想精确查某个用户,可以加过滤条件:
Get-SmbSession | Where-Object {$_.ClientUserName -like "zhangsan"}
想要踢掉某个可疑会话(比如离职员工还在挂机),用:
Close-SmbSession -SessionId <会话ID> -Force
注意:此方法查的是“正在访问域控或文件服务器”的用户,如果用户只开着电脑但没有访问任何共享,这里看不到他。
利用Active Directory用户和计算机的“属性查找”
这是被很多老管理员遗忘的土办法,直接在“Active Directory 用户和计算机”里,对用户对象右键“属性”,在“会话”或“远程控制”标签页中,能看到该用户当前是否有终端服务(RDP)会话。
适合场景:小规模域环境,临时看某一用户是否在远程登录。
- 打开
dsa.msc,定位到目标用户 - 右键 -> 属性 -> “会话”选项卡
- 查看“当前连接数”或会话列表
此方法局限于终端服务(远程桌面)会话,对于普通办公电脑的用户(使用物理PC登录),这个页面通常是空的。
通过事件ID 4624和4634追踪登录活动
这是最接近“审计级”的方案,域控的安全日志里,记录着每一次登录和注销。
在“事件查看器” -> Windows日志 -> 安全 中,搜索以下事件ID:
- 4624(登录成功):包含登录类型(2为本地交互登录,3为网络登录,10为远程交互登录)
- 4634(注销成功):对应会话结束
- 4647(用户主动注销)
适合场景:需要做合规审计、事后追踪的场合。ad域服务器怎么查看域用户登录记录”这类需求,优先依赖事件日志。
查看单个用户在线状态的组合套路:
在Windows PowerShell中执行:
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624} | Where-Object {$_.Properties[0].Value -eq 'zhangsan'} | Select-Object TimeCreated
如果最近一次4624事件后有对应的4634事件,说明用户已注销;如果只有4624没有4634,则可能仍在在线。
局限:如果用户不正常关机(拔电源或强制关机),不会产生4634事件,日志会残留“幽灵在线”状态,行业共识认为,单靠事件ID判断在线率约七成准确,需配合方法一综合判断。
域控上批量导出所有在线用户的实操清单
很多管理员需要的不是看某个人,而是要一张当前在线人员清单,以下步骤适用于Windows Server 2019/2026环境。
导出SMB会话清单
Get-SmbSession | Export-Csv C:temp在线用户.csv -NoTypeInformation
导出最近5分钟的登录成功事件
$since = (Get-Date).AddMinutes(-5)
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624; StartTime=$since} | ForEach-Object {
$_.Properties[0].Value + "," + $_.Properties[5].Value
} | Sort-Object -Unique > C:temp最近登录.txt
合并去重,识别活跃用户
将两个文件用Excel打开,用数据透视表按“用户名”字段去重合并,得到的清单即为当前活跃的域用户。
提醒:域控上如果开启了“计算机配置 -> 管理模板 -> 系统 -> 关机选项 -> 关闭系统事件日志记录”策略,可能影响事件记录的完整性,建议保持默认的强制记录状态。
使用“net session”经典命令查会话
对于习惯使用传统命令行工具的域管理员,net session命令是一个轻量级选择。
在命令提示符中执行:
net session
但注意该命令的结果只显示IP地址和计算机名,不直接显示用户名,需要配合net file命令查看哪些共享文件被谁打开。
| 工具 | 查询对象 | 显示用户名 | 是否支持远程 |
|---|---|---|---|
| Get-SmbSession (PowerShell) | SMB连接 | 是 | 是 |
| net session (CMD) | SMB连接 | 否 | 是 |
| 事件查看器4624 | 登录事件 | 是 | 是 |
| 用户属性“会话” | 终端会话 | 是 | 本地、需权限 |
第三方工具与流量监控的补充方案
当域成员数量较大(超过500人),PowerShell和事件日志的效率会明显下降,此时业内多数管理员会选择部署免费或商用工具。
- Netwrix Auditor:偏向审计,可查登录时间线,免费社区版支持基础功能。
- ManageEngine ADAudit Plus:图形化界面,能直观展示当前登录用户和注销时间,适合多域控分布式环境。
- PRTG Network Monitor:通过监控域控的445端口流量和认证协议,间接推算在线状态。
行业共识认为,对于数百人规模的企业,商业化工具一次配置的成本远低于反复编写PowerShell脚本维护的隐性成本。
域用户是否在线的判断误区与兜底方案
即便用了上述所有方法,也必然存在一个边界情况:用户锁屏但未锁断网络会话。
锁屏后,用户进程仍在运行,SMB会话不会断开,4624事件依然有效,此时域控显示的“在线”和物理意义上的“人不在工位”是两回事,若你的场景是为了“找人沟通”或“找人签流程”,以IM状态为准;若目的是“排查异常会话”或“安全审计”,则以SMB会话+事件日志为准
。
一个实用的兜底判断:在域控上向目标用户的电脑发送远程关机/重启指令的预备命令,如果执行返回错误“找不到网络路径”,通常意味着电脑已离线,不过此操作敏感,不建议对待机用户频繁尝试。
与其猜测在线,不如让域控主动收集用户状态
与其每次手动查询,不如配置一次就自动记录,域控上可以启用“用户登录和注销”的组策略审核,把结果转存到日志服务器中。
在域控的组策略管理编辑器里操作:
- Windows设置 -> 安全设置 -> 高级审核策略配置 -> 系统审核策略 -> 登录/注销
- 开启“审核登录”的成功和失败
- 执行
gpupdate /force刷新策略
此后,每台加入域的电脑登录行为都会实时写入域控的安全日志,你再写一个定时任务:
wevtutil epl Security C:temp登录日志.evtx "/q:[System[(EventID=4624)]]"
就能定期沉淀数据,不用每次手工查。
域AD服务器上查看域用户是否在线的本质,就是一场会话与事件的追踪游戏,掌握SMB会话查看的方法(操作最简单),理解事件4624/4634的配对关系(逻辑最精准),并根据自身环境选择合适的第三方工具(效率最大化),这三板斧足以覆盖绝大多数管理诉求,若是临时确认单个用户状态,优先使用Get-SmbSession配合用户PC的主机名ping一下,在域控查看用户是否在线这个老大难问题上,已经是最快且准的路径。
Q&A:域AD服务器查看用户在线状态常见疑问
问:域控上查看在线用户,Windows Server 2016和2026操作方法有区别吗?
答:核心命令(Get-SmbSession、4624事件查询)在Windows Server 2012 R2到2026之间完全兼容,区别在于PowerShell版本升级后,Server 2026对Get-WinEvent的筛选速度更快,老版本若执行Get-SmbSession报错,可先执行Import-Module SmbShare加载模块。
问:使用域控制器查看用户登录时间,能否精确看出当时在操作什么文件?
答:不能,事件日志只记录登录成功与注销,不记录具体文件操作,如需看某用户访问了哪些共享文件,必须在文件服务器上启用“对象访问审核”并查看事件ID 4663(对象访问成功),域控上的日志看不到具体文件级行为,这一点常被质疑“域控到底有什么用”,但实际上域控的定位是认证中心,文件审计本就归属于资源服务器。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/699306.html





