Scripting 如何使用script/powershell/…确定远程计算机上用于psexec-i的会话id。。。?

Scripting 如何使用script/powershell/…确定远程计算机上用于psexec-i的会话id。。。?,scripting,powershell,automation,psexec,Scripting,Powershell,Automation,Psexec,我需要一个脚本或powershell命令,该命令将能够确定远程计算机上特定登录用户的会话id,稍后用作远程计算机上该用户会话上远程gui进程的psexec-I执行的参数 到目前为止,我设法使用了 psexec \\remoteMachine -u user -p pswrd query session 要获取远程计算机上的会话列表,请执行以下操作: SESSIONNAME USERNAME ID STATE TYPE DEVICE

我需要一个脚本或powershell命令,该命令将能够确定远程计算机上特定登录用户的会话id,稍后用作远程计算机上该用户会话上远程gui进程的psexec-I执行的参数

到目前为止,我设法使用了

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

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


谢谢您的帮助。

只要您使用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,否则它将等待启动的程序退出。

使用psternalservices powershell模块,您可以获取用户会话和ID。
可在此处找到该模块:


没有PowerShell也可以做到这一点。 有一款附带了Windows的手机,您可以使用

例如:

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.

嗨,Keith,我遇到一个错误,说查询以代码1退出。但是,如果我只是运行“psexec\\remoteMachine-u adminuser-p密码查询会话”(不带$results=),它工作得很好。有什么想法吗?提前感谢您的帮助!您好,我已经打印了带有“Write Host session id=$id”的$id,它是“session id=13”。正则表达式有问题吗?似乎“3”是正确的会话id,但“1”是错误的前缀。我相信这个问题是我知道这是一个相当老的问题的重复,但值得一提的是,我发布了一个详细的答案,可能会解决您的问题。
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.