Celui - ci combine les aspects de la réponse de Gary et la réponse d'Oscar . Comme l'a noté Gary, la sortie 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 configuré RDP, donc je ne peux pas tester avec.) Vraisemblablement, l'objectif 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 attribue la 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 query session
à %a
, %b
et %c
, respectivement, et fait ensuite rapport SESSION ID de la ligne où USERNAME est moi et STATE l'est Active
.
Il s'avère que cela query session
prend un username
paramètre, donc ce qui précède peut être simplifié pour
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 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
) parce que c'est dans un script. Vous pouvez probablement laisser de côté @
si le fichier de commandes entier est sous @echo off
. L'initialisation unknown
vous permet de gérer les erreurs (détecter s'il n'y a pas de ligne dans la sortie de query session
cette correspondance). L'extension de la gestion des erreurs pour reconnaître et réagir s'il y a plusieurs lignes correspondantes dans la sortie de query session
est laissée comme exercice.