2010-09-18 66 views
6

我需要一个脚本或PowerShell命令,它能够确定远程机器上特定登录用户的会话ID,稍后将用作该会话的远程GUI进程的psexec -i执行的参数该用户在远程计算机上的位置。如何使用脚本/ powershell/...确定远程计算机上使用psexec -i的会话ID?

到目前为止,我设法利用

psexec \\remoteMachine -u user -p pswrd query session 

获得远程计算机上的会话列表:

SESSIONNAME  USERNAME     ID STATE TYPE  DEVICE 
console          0 Conn wdcon 
rdp-tcp#919  user      1 Active rdpwd 
rdp-tcp#916  user      3 Active rdpwd 

所以我想我能以某种方式分离出所需的ID,并用它 - 但避风港还没有成功做到这一点

任何想法? 也许其他 - 更简单的方法?

感谢您的帮助。

+0

我相信这个问题是一个重复的(HTTP [我能找到的会话ID的用户登录到另一台计算机?]:/ /superuser.com/questions/123242/can-i-find-the-session-id-for-a-user-logged-on-to-another-machine)我知道这是一个相当古老的问题,但它的价值,我已经发布了详细的答案,可以解决您的问题。 – 2015-08-15 02:52:45

回答

4

使用PSTerinalServices PowerShell模块,您可以获取用户会话和ID。
该模块可以在这里找到:http://code.msdn.microsoft.com/PSTerminalServices

PS > Get-TSSession -UserName user1 -ComputerName pc1 | select UserName,SessionId 

UserName SessionId 
-------- --------- 
User    1 
13

只要你使用PSExec,我会坚持下去。你可以很容易地获得ID字段得到一个用户名例如: - 要使用-d与PSEXEC否则会等到启动退出程序

$username = 'joe' 
$results = psexec \\remoteMachine -u adminuser -p password query session 
$id = $results | Select-String "$username\s+(\w+)" | 
       Foreach {$_.Matches[0].Groups[1].Value} 

psexec \\remoteMachine -u $username -i $id -d notepad.exe 

注意。

+0

嗨Keith,我遇到了一个错误,说查询退出代码1.但是,如果我只是运行“psexec \\ remoteMachine -u adminuser -p密码查询会话”(没有$ results =),它运行良好。有任何想法吗?在此先感谢您的帮助! – 2015-05-18 02:47:41

+0

嗨,我用“写主机会话ID = $ ID”打印$ id,它是“会话ID = 1 3”。正则表达式有问题吗?似乎“3”是正确的会话ID,但“1”是错误的前缀。 – QtRoS 2017-11-14 19:58:12

6

这是可以做到的,如果没有的PowerShell。 您可以使用Windows随附的qwinsta command line tool

例子:

c:\>qwinsta 
SESSIONNAME  USERNAME     ID STATE TYPE  DEVICE 
services         0 Disc 
console          1 Conn 
>rdp-tcp#0   YourUser     2 Active rdpwd 
rdp-tcp         65536 Listen 

用法:

c:\>qwinsta /? 
Display information about Remote Desktop Sessions. 

QUERY SESSION [sessionname | username | sessionid] 
       [/SERVER:servername] [/MODE] [/FLOW] [/CONNECT] [/COUNTER] [/VM] 

    sessionname   Identifies the session named sessionname. 
    username   Identifies the session with user username. 
    sessionid   Identifies the session with ID sessionid. 
    /SERVER:servername The server to be queried (default is current). 
    /MODE    Display current line settings. 
    /FLOW    Display current flow control settings. 
    /CONNECT   Display current connect settings. 
    /COUNTER   Display current Remote Desktop Services counters information. 
    /VM     Display information about sessions within virtual machines. 
相关问题