2010-09-18 18 views
6

Necesito un script o un comando de powershell que pueda determinar la identificación de la sesión de un usuario conectado específico en la máquina remota, para usarlo más tarde como parámetro para la ejecución psexec -i del proceso de la GUI remota en esa sesión de ese usuario en la máquina remota.¿Cómo determinar la identificación de la sesión en la máquina remota para su uso con psexec -i usando script/powershell/...?

Hasta ahora logré utilizar

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

obtener la lista de sesiones sobre la máquina remota:

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

así que supongo que de alguna manera podría aislar el ID sea necesario y utilizarlo - pero paraíso 't logró hacer eso todavía

¿Alguna idea? ¿Quizás otras formas más simples?

Gracias por la ayuda.

+0

Creo que esta pregunta es un duplicado de (http [¿Puedo encontrar el identificador de sesión para un usuario conectado a otra máquina?]://superuser.com/questions/123242/can-i-find-the-session-id-for-a-user-logged-on-to-another-machine) Sé que es una pregunta bastante antigua, pero por lo que vale , He publicado una respuesta detallada que podría resolver su problema. –

Respuesta

4

Con el módulo PSTerinalServices powershell puede obtener las sesiones de usuario y los ID.
El módulo se puede encontrar aquí: http://code.msdn.microsoft.com/PSTerminalServices

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

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

Mientras use PSExec, me limitaré a ello. Usted puede obtener el campo ID con bastante facilidad dado un nombre de usuario ej .:

$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 

Tenga en cuenta que desea utilizar con -d de PSExec de lo contrario, esperar hasta que el programa termina lanzados.

+0

Hola Keith, me encontré con un error que decía que la consulta salió con el código 1. Pero si acaba de ejecutar "psexec \\ remoteMachine -u adminuser -p sesión de consulta de contraseña" (sin $ results =), funcionó bien. ¿Algunas ideas? ¡Gracias de antemano por tu ayuda! –

+0

Hola, he impreso $ id con "ID de sesión de Host de grabación = $ id" y era "id de sesión = 1 3". Algo malo con Regex? Parece que "3" es la identificación correcta de la sesión, pero "1" es el prefijo equivocado. – QtRoS

6

Es posible hacerlo sin PowerShell. Hay qwinsta command line tool que se envía con Windows que puede usar.

Ejemplo:

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 

Uso:

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. 
Cuestiones relacionadas