Neg*_*ive 31 windows command-line
如何通过 Windows 命令行检索当前用户会话 ID?
在用户选项卡下的任务列表中,每个用户都与一个会话 ID 相关联。我想通过命令行检索它,以便我可以将它用于远程应用程序。
Gar*_*ary 34
这当然不是最有效的方式,但你可以看看tasklist. 它将显示每个正在运行的进程的名称和会话编号。如果您在本地登录,则查看名为“控制台”的会话的 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
Run Code Online (Sandbox Code Playgroud)
编辑:
Query Session 将检索会话 ID:
d:\>query session
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
Run Code Online (Sandbox Code Playgroud)
这结合了Gary 的回答和Oscar 的回答的各个方面。正如加里所指出的,输出query session看起来像
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
Run Code Online (Sandbox Code Playgroud)
或者,就我而言(使用“切换用户”)
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console gman 1 Active
otherguy 2 Disc
Run Code Online (Sandbox Code Playgroud)
(我没有设置 RDP,所以我不能用它进行测试。)大概这个问题的目的是确定当前活动会话的 ID。我建议搜索query session
看起来像当前会话的输出:
for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b
Run Code Online (Sandbox Code Playgroud)
该第二,第三,和第四字(其中我们希望用户名,[SESSION]标识和状态)从输出的每一行分配query session到%a,%b和%c分别,然后从报告SESSION?ID USERNAME 是我而 STATE 是Active.
事实证明它query session需要一个username参数,所以上面可以简化为
for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b
Run Code Online (Sandbox Code Playgroud)
或者
for /f "tokens=3-4" %a in ('query session %username%') do @if "%b"=="Active" echo %a
Run Code Online (Sandbox Code Playgroud)
要在脚本(批处理文件)中使用它,您可能想说
set MY_SESSION_ID=unknown
for /f "tokens=3-4" %%a in ('query session %username%') do @if "%%b"=="Active" set MY_SESSION_ID=%%a
Run Code Online (Sandbox Code Playgroud)
使用%%aand %%b(而不是%aand %b),因为它在脚本中。你也许可以离开了@
,如果整批文件下@echo off。初始化unknown使您可以进行错误处理(检测query session
匹配的输出中是否没有行)。如果输出中有多个匹配行,则扩展错误处理以识别并做出反应query session
作为练习。
小智 5
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%
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
166148 次 |
| 最近记录: |