Как определить идентификатор сеанса на удаленной машине для использования с psexec -i, используя script / powershell / ...? - PullRequest
6 голосов
/ 18 сентября 2010

Мне нужна команда скрипта или powershell, которая сможет определить идентификатор сеанса конкретного пользователя, вошедшего в систему на удаленной машине, чтобы позже использовать его в качестве параметра для выполнения 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

так что, думаю, я мог бы каким-то образом изолировать необходимый идентификатор и использовать его - но пока не смог этого сделать

Есть идеи? Может быть, другие - более простые способы?

Спасибо за помощь.

Ответы [ 3 ]

14 голосов
/ 19 сентября 2010

Пока вы используете 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

Обратите внимание, что вы хотите использовать -d с PSExec, в противном случае он будет ожидать выхода из запущенной программы.

7 голосов
/ 11 января 2012

Это возможно сделать без PowerShell. Существует qwinsta инструмент командной строки , который поставляется с 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.
4 голосов
/ 19 сентября 2010

С модулем PowerShell PSTerinalServices вы можете получить пользовательские сессии и идентификаторы.
Модуль можно найти здесь: http://code.msdn.microsoft.com/PSTerminalServices

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

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