2010-09-18 8 views
6

Ho bisogno di un comando script o PowerShell che sarà in grado di determinare l'id sessione di uno specifico utente connesso sul computer remoto, per essere poi utilizzato come parametro per l'esecuzione -i psexec di processo gui remota su quella sessione di quell'utente sulla macchina remota.Come determinare l'ID di sessione sul computer remoto per l'utilizzo con psexec -i utilizzando script/powershell/...?

Finora sono riuscito a utilizzare

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

ottenere l'elenco delle sessioni sulla macchina 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 

così Credo che avrei potuto in qualche modo isolare l'id necessario e usarlo - ma rifugio Sono riuscito a farlo ancora

Qualche idea? Forse altri - modi più semplici?

Grazie per l'aiuto.

+0

Credo che questa domanda è un duplicato di (http [Posso trovare l'ID di sessione per un utente connesso a un altro computer?]://superuser.com/questions/123242/can-i-find-the-session-id-for-a-user-logged-on-to-another-machine) So che è una domanda piuttosto vecchia, ma per quello che vale , Ho pubblicato una risposta dettagliata che potrebbe risolvere il tuo problema. –

risposta

4

Con le PSTerinalServices PowerShell Modulo è possibile ottenere le sessioni utente e ID.
Il modulo può essere trovato qui: http://code.msdn.microsoft.com/PSTerminalServices

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

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

Finché si sta utilizzando PSExec, vorrei solo bastone con esso. È possibile ottenere il campo ID abbastanza facilmente dato un nome utente es .:

$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 

nota che si desidera utilizzare -d con PSExec altrimenti attendere fino a quando il programma termina lanciati.

+0

Ciao Keith, mi sono imbattuto in un errore che diceva che la query era terminata con il codice 1. Ma se ho appena eseguito "psexec \\ remoteMachine -u adminuser -p password query session" (senza $ results =), ha funzionato bene. Qualche idea? Grazie in anticipo per il vostro aiuto! –

+0

Ciao, ho stampato $ id con "ID sessione Write-Host = $ id" ed era "ID sessione = 1 3". Qualcosa non va con regex? Sembra che "3" sia l'id della sessione corretta, ma "1" è prefisso errato. – QtRoS

6

E 'possibile farlo senza PowerShell. C'è qwinsta command line tool fornito con Windows che è possibile utilizzare.

Esempio:

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 

Usage:

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.