SessionView
一个轻量级的C#控制台应用程序,用于枚举和显示Windows Server上的所有用户会话,包括会话GUID。
功能特性
- 完整的会话枚举:列出Windows服务器上的所有活动会话
- 详细的会话信息:显示会话ID、站名称、连接状态、用户名和域
- 会话GUID检索:从Windows注册表中提取每个会话的唯一GUID标识符
- 连接状态检测:显示会话是活动、断开、空闲等状态
- 整洁的控制台输出:格式清晰的输出,便于快速分析会话
系统要求
- Windows Server (2012 R2 或更高版本) 或 Windows 客户端 (Windows 10/11)
- .NET Framework 4.7.2+
- 管理员权限(访问会话信息和注册表需要)
安装
选项1:从源代码编译
- 克隆或下载仓库
- 在 Visual Studio 2019 或更高版本中打开解决方案
- 编译解决方案 (Ctrl+Shift+B)
- 可执行文件位于
bin\Debug 或 bin\Release 目录
选项2:命令行编译
# 使用 MSBuild(Visual Studio 开发人员命令提示符)
msbuild SessionView.csproj /p:Configuration=Release
# 或者直接使用 CSC
csc /out:SessionView.exe /platform:anycpu Program.cs
使用方法
- 以管理员身份运行:此工具需要提升的令牌
- 应用程序将自动枚举所有会话并显示信息
示例输出
=== Windows Server 会话枚举器 ===
找到 3 个会话
会话 1:
会话 ID: 0
站名称: Services
状态: WTSDisconnected
用户名: (无用户登录)
会话 GUID: (不可用)
会话 2:
会话 ID: 1
站名称: Console
状态: WTSActive
用户名: Administrator
域: MYSERVER
会话 GUID: {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}
会话 3:
会话 ID: 2
站名称: RDP-Tcp#1
状态: WTSDisconnected
用户名: JohnDoe
域: COMPANY
会话 GUID: {B2C3D4E5-F6A7-8901-BCDE-F12345678901}
按任意键退出...
会话状态
应用程序可显示以下连接状态:
- WTSActive:用户正在活动使用会话
- WTSConnected:会话已连接
- WTSDisconnected:会话已断开但仍在运行
- WTSIdle:会话空闲
- WTSListen:会话正在监听连接
- WTSReset:会话正在重置
- WTSDown:会话已关闭
- WTSInit:会话正在初始化
技术细节
使用的API
- WTS API (wtsapi32.dll):用于枚举会话和查询会话信息
- Windows注册表API (advapi32.dll):用于从注册表中检索会话GUID
注册表位置
会话GUID存储在:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Remote\Terminal Services\Session\{SessionId}\SessionGuid
已知限制
- 会话0(服务会话)通常没有GUID
- 需要管理员权限才能访问会话信息
- 某些会话根据其状态可能无法提供完整信息
故障排除
“访问被拒绝”错误
- 确保以管理员身份运行应用程序
- 检查是否具有服务器上的适当权限
缺少会话GUID
- 对于某些系统会话(如会话0),这是正常现象
- 某些已断开的会话可能不会在注册表中保留其GUID
未找到会话
- 确认正在运行启用了终端服务的Windows Server
- 检查是否已安装远程桌面服务角色
使用场景
- 系统管理:监控活动及断开的用户会话
- 远程桌面管理:跟踪RDP连接及其状态
- 安全审计:识别用户会话及其唯一标识符
- 会话管理脚本:集成自动化工具有序清理会话
- 故障排除:诊断终端服务器上的会话相关问题
许可证
本项目按原样提供,仅用于教育和行政管理目的。
贡献
欢迎提交问题、复刻仓库并创建拉取请求以进行任何改进。