2010-09-18 3 views
6

Ich benötige einen Skript- oder Powershell-Befehl, der in der Lage sein wird, die Session-ID eines bestimmten angemeldeten Benutzers auf dem entfernten Rechner zu bestimmen, um später als Parameter für die Ausführung des Remote-GUI-Prozesses in dieser Sitzung verwendet zu werden dieses Benutzers auf dem Remote-Computer.Wie ermitteln Sie die Session-ID auf Remote-Computer für die Verwendung mit psexec -i mit Skript/Powershell/...?

Bisher gelang es mir

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

zu erhalten Liste der Sitzungen auf dem entfernten Rechner zu verwenden:

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

so ich denke, ich könnte irgendwie die benötigte ID isolieren und sie verwenden - aber haven 't schaffte das noch zu tun

Irgendwelche Ideen? Vielleicht andere - einfachere Wege?

Danke für die Hilfe.

+0

Ich glaube, diese Frage ist ein Duplikat ist (http [Kann ich die Session-ID finde für einen Benutzer auf einem anderen Rechner angemeldet?]://superuser.com/questions/123242/cani-i-find-the-session-id-for-a-user-logged-on-to-another-machine) Ich weiß, es ist eine ziemlich alte Frage, aber für was es wert ist Ich habe eine detaillierte Antwort geschrieben, die dein Problem lösen könnte. –

Antwort

4

Mit dem Powershell-Modul PSTerinalServices können Sie die Benutzersitzungen und IDs abrufen.
Das Modul kann hier gefunden werden: http://code.msdn.microsoft.com/PSTerminalServices

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

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

Solange Sie PSExec verwenden, würde ich einfach dabei bleiben. Sie können das ID-Feld bekommen ziemlich leicht einen bestimmten Benutzername z.B .:

$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 

Beachten Sie, dass -d mit PSExec verwenden mögen, sonst ist es, bis die gestarteten Programm Ausfahrten warten.

+0

Hallo Keith, ich stieß auf einen Fehler, der besagt, dass die Abfrage mit Code 1 beendet wurde. Aber wenn ich gerade "psexec \\ remoteMachine -u adminuser -p Kennwortabfrage-Sitzung" (ohne $ results =) ausgeführt habe, hat es gut funktioniert. Irgendwelche Ideen? Vielen Dank im Voraus für Ihre Hilfe! –

+0

Hallo, ich habe $ ID mit "Write-Host Session ID = $ ID" gedruckt und es war "Session ID = 1 3". Irgendwas stimmt nicht mit Regex? Scheint, dass "3" die richtige Sitzungs-ID ist, aber "1" ist ein falsches Präfix. – QtRoS

6

Es ist möglich, ohne dass Powershell, das zu tun. Es gibt qwinsta command line tool, die mit Windows ausgeliefert werden, die Sie verwenden können.

Beispiel:

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 

Verbrauch:

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. 
Verwandte Themen