如何批量获取已知用户名的(交互式)会话数
How to get (interactive) session # of known username in batch
我发现了如何在 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。
我如何read/parse这个来获取会话号?我预计将来它不会总是“3”。另一种选择是依赖控制台用户,因为只能有一个,对吗? (此工作站上未启用用户切换)和 return 控制台用户的会话号。
为什么我关心会话#?因为我需要 运行 一些东西来提示工作站上的用户是否想现在就做。
当我通过...启动这个过程时
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”)并将其存储为变量。
for /f "tokens=3 skip=1" %%# in ('qwinsta targetuser') do set "userid=%%#"
echo %userid%
请注意 qwinsta/query/terminal 服务未安装在 windows 的 home/basic 版本上。
我发现了如何在 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。
我如何read/parse这个来获取会话号?我预计将来它不会总是“3”。另一种选择是依赖控制台用户,因为只能有一个,对吗? (此工作站上未启用用户切换)和 return 控制台用户的会话号。
为什么我关心会话#?因为我需要 运行 一些东西来提示工作站上的用户是否想现在就做。
当我通过...启动这个过程时
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”)并将其存储为变量。
for /f "tokens=3 skip=1" %%# in ('qwinsta targetuser') do set "userid=%%#"
echo %userid%
请注意 qwinsta/query/terminal 服务未安装在 windows 的 home/basic 版本上。