web-dev-qa-db-fra.com

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

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

Dans la liste des tâches de l'onglet Utilisateurs, chaque utilisateur est associé à un identifiant de session. Je souhaite récupérer ceci via une ligne de commande afin de pouvoir l'utiliser pour une application distante.

24
Negative

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 d'exécution. Si vous êtes connecté localement, examinez 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

Éditer :

Query Session récupérera l'identifiant de session:

d:\>query session
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 services                                    0  Disc
>console           janedoe                   1  Active
 rdp-tcp                                 65536  Listen
27
Gary

Cela combine les aspects de la réponse de Gary et de la réponse d’Oscar . Comme l'a noté Gary, le résultat de query session ressemble à quelque chose comme:

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

ou, dans mon cas (en utilisant “Changer d'utilisateur”)

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

(Je n’ai pas de configuration RDP, donc je ne peux pas tester avec.) Vraisemblablement, le but de la question est de déterminer l’ID de la session actuellement active. Je suggère de rechercher dans la sortie de query session ce qui ressemble à la session en cours:

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

qui assigne les 2e, 3e et 4e mots (nous espérons être le nom d'utilisateur, l'identifiant [SESSION] et l'état) de chaque ligne de la sortie de query session à %a, %b et %c, respectivement, puis renvoie SESSIONID de la ligne où USERNAME est moi et STATE est Active.

Il s'avère que query session prend un paramètre username, ce qui permet de simplifier ce qui précède

 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 utiliser cela dans un script (fichier de commandes), vous voudrez peut-être 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) car il s’agit d’un script. Vous pouvez probablement omettre le @ si l'intégralité du fichier de commandes est sous @echo off. L'initialisation à unknown vous permet de gérer les erreurs (détecter s'il n'y a aucune ligne dans la sortie de query session qui correspond). L'extension de la gestion des erreurs pour reconnaître et réagir s'il existe plusieurs lignes de correspondance dans la sortie de query session est laissée sous forme d'exercice.

5
G-Man
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%
4
Oscar Beh

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

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

Il affichera à la fois l’identifiant de session et l’aura comme code de retour afin que vous puissiez l’utiliser dans divers scripts/techniques.

Lien vers un fichier sur MediaFire

2
William Hilsum

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

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

Nous rapportons ici toutes les instances de tasklist pour nous assurer qu'aucune autre session n'exécute cette commande:

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

Si deux identifiants de session sont signalés, exécutez à nouveau le script.

1
Matthew Lundberg