2010-09-18 14 views
6

Potrzebuję skryptu lub polecenia powershell, które będą w stanie określić identyfikator sesji określonego zalogowanego użytkownika na zdalnym komputerze, aby później użyć go jako parametru psexec -i wykonanie zdalnego procesu GUI w tej sesji tego użytkownika na zdalnym komputerze.Jak określić identyfikator sesji na komputerze zdalnym do użycia z psexec -i przy użyciu skryptu/powershell/...?

Do tej pory udało mi się wykorzystać

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

do listy sesji na komputerze zdalnym dostać:

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

więc myślę, że mógłby jakoś odizolować potrzebne id i użyć go - ale Haven 't udało się to zrobić jeszcze

Wszelkie pomysły? Może inne - prostsze sposoby?

Dzięki za pomoc.

+0

Wierzę, że to pytanie jest duplikatem (http [mogę znaleźć identyfikator sesji dla użytkownika zalogowanego na innym komputerze?]://superuser.com/questions/123242/can-i-find-the-session-id-a--user-logged-on-to-another-machine) Wiem, że to dość stare pytanie, ale o to, co warto , Opublikowałem szczegółową odpowiedź, która może rozwiązać Twój problem. –

Odpowiedz

4

Z modułem powershell PSTerinalServices można uzyskać sesje użytkownika i identyfikatory.
Moduł można znaleźć tutaj: http://code.msdn.microsoft.com/PSTerminalServices

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

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

Tak długo, jak korzystasz z PSExec, po prostu się z tym uporam. Można dostać się na pole ID dość łatwo podana nazwa użytkownika np .:

$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 

Zauważ, że chcesz korzystać z -d psexec inaczej będzie czekać aż do zjazdu uruchomionych programów.

+0

Cześć Keith, natrafiłem na błąd informujący, że zapytanie zakończyło się kodem 1. Ale jeśli po prostu uruchomiłem "psexec \\ remoteMachine -u adminuser -p zapytanie o hasło" (bez $ results =), to działało dobrze. Jakieś pomysły? Z góry dziękuje za twoją pomoc! –

+0

Witam, wydrukowałem $ id z "Write-Host session id = $ id" i było to "session id = 1 3". Coś nie tak z regex? Wydaje się, że "3" jest poprawnym identyfikatorem sesji, ale "1" jest błędnym prefiksem. – QtRoS

6

Jest możliwe, aby to zrobić bez PowerShell. Jest qwinsta command line tool dostarczany z systemem Windows, z którego można korzystać.

Przykład:

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 

Zastosowanie:

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. 
Powiązane problemy