2010-09-18 29 views
6

J'ai besoin d'une commande script ou powershell qui sera capable de déterminer l'identifiant de session d'un utilisateur connecté spécifique sur une machine distante, pour être utilisé par la suite comme paramètre de l'exécution psexec -i du processus gui distant sur cette session de cet utilisateur sur la machine distante.Comment déterminer l'identifiant de session sur une machine distante pour l'utiliser avec psexec -i en utilisant script/powershell/...?

Jusqu'à présent, je réussi à utiliser

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

pour obtenir la liste des sessions sur la machine distante:

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

donc je suppose que je pourrais en quelque sorte d'isoler l'identifiant nécessaire et l'utiliser - mais havre de paix pas réussi à le faire encore

Des idées? Peut-être d'autres - des moyens plus simples?

Merci pour l'aide.

+0

Je crois que cette question est un double de (http [Puis-je trouver l'ID de session pour un utilisateur connecté à une autre machine?]://superuser.com/questions/123242/can-i-find-the-session-id-for-a-user-logged-on-to-another-machine) Je sais que c'est une vieille question, mais pour ce que ça vaut , J'ai posté une réponse détaillée qui pourrait résoudre votre problème. –

Répondre

4

Avec le module PSTerinalServices powershell, vous pouvez obtenir les sessions utilisateur et les ID.
Le module se trouve ici: http://code.msdn.microsoft.com/PSTerminalServices

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

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

Tant que vous utilisez PSExec, je voudrais juste s'en tenir à cela. Vous pouvez obtenir le champ ID assez facilement donné un nom d'utilisateur .: par exemple

$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 

Notez que vous souhaitez utiliser -d avec PSExec sinon il attendra jusqu'à ce que les sorties du programme lancé.

+0

Salut Keith, je suis tombé sur une erreur disant que la requête est terminée avec le code 1. Mais si je viens de lancer "psexec \\ remoteMachine -u adminuser -p session de requête de mot de passe" (sans $ results =), cela a bien fonctionné. Des idées? Merci d'avance pour votre aide! –

+0

Bonjour, j'ai imprimé $ id avec "Write-Host session id = $ id" et c'était "session id = 1 3". Quelque chose ne va pas avec regex? Semble que "3" est l'identifiant de session correct, mais "1" est un mauvais préfixe. – QtRoS

6

Il est possible de le faire sans PowerShell. Il y a qwinsta command line tool livré avec Windows que vous pouvez utiliser.

Exemple:

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 

Utilisation:

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.