2011-06-29 14:17:06 +0000 2011-06-29 14:17:06 +0000
27
27

Comment puis-je récupérer l'ID de session à partir de la ligne de commande ?

Comment puis-je récupérer l'ID de la session utilisateur actuelle via la ligne de commande Windows ?

Dans la liste de tâches sous l'onglet utilisateurs, chaque utilisateur est associé à un ID de session. Je veux le récupérer via la ligne de commande afin de pouvoir l'utiliser pour une application à distance.

Réponses (5)

29
29
29
2011-06-29 14:24:34 +0000

Ce n'est certainement pas le moyen le plus efficace, mais vous pouvez jeter un coup d'œil aux résultats de tasklist. Il affichera le nom et le numéro de session de chaque processus en cours. Si vous êtes connecté localement, regardez l'ID de la session nommée “console”.

d:\>tasklist

Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 24 K
System 4 Services 0 8,580 K
smss.exe 316 Services 0 1,500 K
...snip
  • *

Edit :

Query Session récupérera l'ID de la session :

d:\>query session
 SESSIONNAME USERNAME ID STATE TYPE DEVICE
 services 0 Disc
>console janedoe 1 Active
 rdp-tcp 65536 Listen
6
6
6
2016-02-04 22:21:53 +0000

Cela combine des aspects de réponse de Gary et réponse d'Oscar .&nbsp ; Comme l'a noté Gary, la sortie de query session ressemble à

SESSIONNAME USERNAME ID STATE TYPE DEVICE
 services 0 Disc
>console janedoe 1 Active
 rdp-tcp 65536 Listen

ou, dans mon cas (en utilisant “Switch user”)

SESSIONNAME USERNAME ID STATE TYPE DEVICE
 services 0 Disc
>console gman 1 Active
                   otherguy 2 Disc

(Je n'ai pas configuré RDP, donc je ne peux pas tester avec. )&nbsp ; On peut supposer que l'objectif de la question est de déterminer l'identifiant de la session actuellement active. &nbsp ; Je suggère de chercher dans la sortie de query session ce qui ressemble à la session actuelle :

for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b

qui assigne le 2ème, 3ème et 4ème mot (que nous espérons être le USERNAME, [SESSION] ID, et STATE) de chaque ligne de la sortie de query session à %a, %b, et%c, respectivement, et ensuite rapporte le SESSION ID de la ligne où USERNAME est moi et STATE est Active.

Il s'avère que query session prend un paramètre username, donc ce qui précède peut être simplifié en

for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b

ou

for /f "tokens=3-4" %a in ('query session %username%') do @if "%b"=="Active" echo %a

Pour l'utiliser dans un script (fichier batch), vous pourriez dire

set MY_SESSION_ID=unknown
for /f "tokens=3-4" %%a in ('query session %username%') do @if "%%b"=="Active" set MY_SESSION_ID=%%a

en utilisant %%a et %%b (au lieu de %a et %b) parce que c'est dans un script. &nbsp ; Vous pouvez probablement omettre le @ si tout le fichier du lot est sous @echo off. L'initialisation à unknown vous permet de faire du traitement d'erreur (détecter s'il n'y a pas de ligne dans la sortie de query session qui correspond).&nbsp ; Extension du traitement d'erreur pour reconnaître et réagir s'il y a multiple lignes correspondantes dans la sortie de query sessionis laissée comme exercice.

5
5
5
2013-01-03 14:52:01 +0000
for /f "tokens=4 delims= " %%G in ('tasklist /FI "IMAGENAME eq tasklist.exe" /NH') do SET RDP_SESSION=%%G
echo Current RDP Session ID: %RDP_SESSION%
2
2
2
2011-06-29 14:28:57 +0000

Contrairement au nom de la session, l'ID de la session n'est pas stocké dans une variable et n'est pas aussi facile d'accès. Je suis sûr qu'il y en a une, mais je n'arrive pas à penser à un outil en ligne de commande intégré qui fasse cela.

Cependant, j'ai écrit un petit fichier .exe (C#, .Net 4) qui fait cela.

Il affichera l'identifiant de la session et l'utilisera comme code de retour pour que vous puissiez l'utiliser dans divers scripts/techniques. Lien vers le fichier sur MediaFire

1
1
1
2016-02-04 22:08:48 +0000

Il est basé sur le code d'Oscar Beh.

tasklist affichera le rapport de l'ID de session (et d'autres informations) pour toutes les instances d'un exécutable donné, y compris lui-même. Pendant que vous exécutez la commande, il affichera votre ID de session. Le seul défaut potentiel de son code est qu'il ne vous informe pas s'il y a plusieurs instances du programme, ce qui peut entraîner le renvoi de résultats incorrects par le script.

Ici, nous signalons toutes les instances de tasklist pour nous assurer qu'il n'y a pas une autre session qui exécute cette commande :

for /f "tokens=4 delims= " %%G in ('tasklist /FI "IMAGENAME eq tasklist.exe" /NH') do echo Session ID %%G

Si vous voyez deux ID de session signalés, exécutez à nouveau le script.