PowerShell可通过注册表(HKEY_CURRENT_USER...\Servers等路径)查RDP连接记录,及事件日志(ID 21/24/25与安全日志4624/4648)获取连接事件,需按需组合、管理员权限执行。
powershell 可以从注册表和事件日志两个维度获取 windows 远程连接历史,重点在于区分“连接记录”(用户曾连过哪些主机)和“连接事件”(何时、由谁、因何建立或中断会话)。实际使用中需按需组合方法,不依赖单一来源。
读取远程桌面客户端连接历史(注册表路径)
Windows 客户端在连接 RDP 时,会将目标服务器地址、用户名提示等信息写入当前用户的注册表:
- 当前用户:直接查询 HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers 下各子项,每个子项名为服务器地址,其下的 UsernameHint 值即为上次输入的用户名;
- 已登录用户:遍历 HKEY_USERS 下所有以 SID 开头的子键,在对应路径 Software\Microsoft\Terminal Server Client\Servers 中读取;
- 所有用户(含未登录者):需逐个加载各用户 NTUSER.DAT 文件(位于 C:\Users\{用户名}\NTUSER.DAT),用
reg load挂载到 HKEY_USERS 下临时路径,查询后再用reg unload卸载,避免残留。
提取远程会话状态变化事件(事件日志)
服务端(如 Windows Server 或启用了远程桌面的 Win10/11)会记录会话生命周期事件,核心日志通道为:
- Microsoft-Windows-TerminalServices-LocalSessionManager/Operational,需确保该日志已启用(事件查看器中右键启用);
- ID 21:会话登录(远程用户成功连接);
- ID 24:会话断开(网络中断、主动断开,非注销,是统计“意外掉线”的关键);
- ID 25:会话注销(用户主动登出或超时清理,不应计入网络异常);
- 建议用
Get-WinEvent -FilterHashtable指定 LogName、ID 和 StartTime/EndTime,以管理员身份运行才可读取该日志。
关联登录源 IP(安全日志辅助)
仅靠会话日志无法获知连接来源 IP,需结合安全日志中的认证事件:
- 筛选 Security 日志中 ID 4624(登录成功),关注 Workstation Name 和 IP Address 字段(若启用网络级身份验证 NLA,IP 通常可见);
- ID 4648(显式凭据使用)也会包含源 IP,适用于某些绕过默认登录流程的场景;
- 注意:默认情况下,本地账户登录可能不记录 IP,域账户在域控制器同步日志中更完整。
自动化脚本整合建议
单一命令难以覆盖全部需求,推荐分层调用:
- 快速查本机连过哪些 RDP 主机:运行简版注册表枚举脚本,输出服务器名+用户名提示;
- 排查近 24 小时是否频繁断连:用
Get-WinEvent查 ID 24 并统计次数,再人工抽查几条看 Message 是否含 “network error”、“connection lost” 等关键词; - 审计某用户近期所有远程活动:先通过 SID 定位其注册表连接历史,再查安全日志中对应用户名的 4624/4625 事件时间线;
- 避免权限失败:所有涉及事件日志的操作请以管理员身份启动 PowerShell;注册表加载操作也需管理员权限。


















