如何通过 Windows 命令行检索当前用户会话 ID?
在用户选项卡下的任务列表中,每个用户都与一个会话 ID 相关联。我想通过命令行检索此 ID,以便可以将其用于远程应用程序。
答案1
这当然不是最有效的方法,但您可以查看 的结果tasklist
。它将显示正在运行的每个进程的名称和会话编号。如果您在本地登录,请查看名为“console”的会话的 ID。
d:\>tasklist
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 24 K
System 4 Services 0 8,580 K
smss.exe 316 Services 0 1,500 K
...snip
编辑:
Query Session
将检索会话 ID:
d:\>query session
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
答案2
这结合了Gary 的回答和奥斯卡的回答。正如 Gary 所说,的输出query session
看起来像
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
或者,就我的情况而言(使用“切换用户”)
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console gman 1 Active
otherguy 2 Disc
(我没有设置 RDP,因此无法使用它进行测试。)据推测,这个问题的目的是确定当前活动会话的 ID。我建议搜索输出以查找query session
看起来像当前会话的内容:
for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b
将 的每一行输出中的第 2、第 3 和第 4 个字(我们希望分别为 USERNAME、[SESSION] ID 和 STATE)分别分配给query session
、%a
和%b
,%c
然后从 USERNAME 为 me 且 STATE 为 的行中报告 SESSION ID Active
。
query session
事实证明,username
参数,因此上式可以简化为
for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b
或者
for /f "tokens=3-4" %a in ('query session %username%') do @if "%b"=="Active" echo %a
要在脚本(批处理文件)中使用它,您可能需要说
set MY_SESSION_ID=unknown
for /f "tokens=3-4" %%a in ('query session %username%') do @if "%%b"=="Active" set MY_SESSION_ID=%%a
使用%%a
and %%b
(而不是%a
and ),因为它在脚本中。 如果整个批处理文件都在 下,%b
您可能可以省略。初始化 到允许您进行错误处理(检测 的输出中是否没有 匹配的行)。扩展错误处理以识别并响应是否存在@
@echo off
unknown
query session
多种的输出中的匹配行query session
留作练习。
答案3
for /f "tokens=4 delims= " %%G in ('tasklist /FI "IMAGENAME eq tasklist.exe" /NH') do SET RDP_SESSION=%%G
echo Current RDP Session ID: %RDP_SESSION%
答案4
这是基于 Oscar Beh 的代码。
tasklist
将显示报告给定可执行文件的所有实例(包括其自身)的会话 ID(和其他信息)。当您运行该命令时,它将显示您的会话 ID。他的代码中唯一的潜在缺陷是它不会通知您程序是否有多个实例,这可能导致脚本返回不正确的结果。
这里我们报告所有实例tasklist
以确保没有其他会话运行该命令:
for /f "tokens=4 delims= " %%G in ('tasklist /FI "IMAGENAME eq tasklist.exe" /NH') do echo Session ID %%G
如果您看到报告了两个会话 ID,请再次运行该脚本。