如何使用script / powershell / ...确定远程机器上的会话ID以便与psexec -i一起使用?

时间:2010-09-18 18:20:33

标签: scripting powershell automation psexec

我需要一个脚本或powershell命令,它能够确定远程机器上特定登录用户的会话ID,以后用作psexec -i执行远程gui进程的参数该用户在远程计算机上的会话。

到目前为止我设法使用

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并使用它 - 但还没有设法做到这一点

有什么想法吗? 也许其他 - 更简单的方法?

感谢您的帮助。

3 个答案:

答案 0 :(得分:14)

只要您使用PSExec,我就会坚持下去。您可以使用用户名轻松获取ID字段,例如:

$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

请注意,您希望将-d与PSExec一起使用,否则它将等到启动的程序退出。

答案 1 :(得分: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.

答案 2 :(得分:4)

使用PSTerinalServices powershell模块,您可以获得用户会话和ID 可以在此处找到该模块:http://code.msdn.microsoft.com/PSTerminalServices

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

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