【问题标题】:How to get (interactive) session # of known username in batch如何批量获取(交互式)会话#已知用户名
【发布时间】:2015-12-16 22:46:25
【问题描述】:

我发现了如何在 Windows 中列出会话,我得到以下输出...

c:\logonsessions -c

Logonsessions v1.3
Copyright (C) 2004-2015 Mark Russinovich
Sysinternals - wwww.sysinternals.com

Session,User Name,Auth Package,Logon Type,Session,Sid,Logon Time,Logon Server,DNS Domain,UPN,Processes
00000000:000003e7,WORKGROUP\pcname$,NTLM,(none),0,S-1-5-18,9/19/2015 2:51:11 PM,,,,
00000000:0000a5ea,,NTLM,(none),0,(none),9/19/2015 2:51:11 PM,,,,
00000000:000003e4,WORKGROUP\pcname$,Negotiate,Service,0,S-1-5-20,9/19/2015 2:51:15 PM,,,,
00000000:000003e5,NT AUTHORITY\LOCAL SERVICE,Negotiate,Service,0,S-1-5-19,9/19/2015 2:51:15 PM,,,,
00000000:000003e3,NT AUTHORITY\IUSR,Negotiate,Service,0,S-1-5-17,9/19/2015 2:51:29 PM,,,,
00000000:000237ce,NT AUTHORITY\ANONYMOUS LOGON,NTLM,Network,0,S-1-5-7,9/19/20152:51:40 PM,,,,
00000000:0008f3b8,pcname\targetuser,NTLM,Interactive,3,S-1-5-21-619702857-3907507909-453961168-1000,9/19/2015 3:13:18 PM,D,,,
00000000:000c0c9d,IIS APPPOOL\siteA,Negotiate,Service,0,S-1-5-82-2579537164-80563901-952080054-1630798588-2545742339,9/19/2015 3:31:45 PM,,,,
00000000:001df99a,IIS APPPOOL\siteB,Negotiate,Service,0,S-1-5-82-3368103016-2489489752-2714024436-2368677762-3860426159,9/19/2015 5:16:52 PM,,,,

c:\query session
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
                                             0  Disc
>console           targetuser                3  Active
 rdp-tcp                                 65536  Listen

所以如果已知用户名是“targetuser”,那么上面的会话 ID 就是 3。

如何读取/解析此内容以获取会话编号?我预计将来它不会总是“3”。另一种选择是依赖控制台用户,因为只能是一个,对吗? (此工作站上未启用用户切换)并返回控制台用户的会话号。

我为什么要关心会话#?因为我需要运行一些东西来提示工作站上的用户是否现在要这样做。

当我通过...启动此过程时

psexec -accepteula -i 3 -d "C:\Program Files (x86)\Skype\Phone\Skype.exe" /callto:[user_ID]

...我必须能够提供会话 ID(在本例中为 3)

编辑:显然,这可能更容易......

c:\query session targetuser
SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
>console          targetuser                3  Active

...所以这已经接近我想要的了,现在我只需要解析第二行以找到 ID(在本例中为“3”)并将其存储为变量。

【问题讨论】:

    标签: windows batch-file skype


    【解决方案1】:
    for /f "tokens=3 skip=1" %%# in ('qwinsta targetuser') do set "userid=%%#"
    echo %userid%
    

    请注意 qwinsta/query/terminal 服务未安装在 Windows 的 home/basic 版本上。

    【讨论】:

    • 我不确定我是否遵循 - 我知道“targetuser”是用户名 - 我想要找到的是会话 ID(在我的示例中这是 3,但不会是每次。你仍然帮助我,我认为这有效: for /f "tokens=3 skip=1" %%A in ('query session targetuser') do set "sessionid=%%A" echo %sessionid%跨度>
    • @user3769418 - 是的,我错过了一个%qwinstaquery session 是别名 - 都是终端服务命令的一部分(用于远程会话)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    相关资源
    最近更新 更多