To łączy aspekty odpowiedzi Gary'ego i odpowiedzi Oscara . Jak zauważył Gary, produkcja query session
wygląda podobnie
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
lub, w moim przypadku (używając „Przełącz użytkownika”)
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console gman 1 Active
otherguy 2 Disc
(Nie mam skonfigurowanego protokołu RDP, więc nie mogę go przetestować.) Prawdopodobnie celem tego pytania jest określenie identyfikatora aktualnie aktywnej sesji. Sugeruję przeszukanie danych wyjściowych query session
czegoś, co wygląda jak bieżąca sesja:
for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b
który przypisuje 2, 3 i 4 słowa (które mamy nadzieję, że nazwa użytkownika [SESJA] ID i stan) z każdej linii wyjścia query session
do %a
, %b
i %c
, odpowiednio, a następnie informuje Session ID z linii, gdzie USERNAME to ja, a STATE to Active
.
Okazuje się, że query session
wymaga username
parametru, więc powyższe można uprościć
for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b
lub
for /f "tokens=3-4" %a in ('query session %username%') do @if "%b"=="Active" echo %a
Aby użyć tego w skrypcie (plik wsadowy), możesz powiedzieć
set MY_SESSION_ID=unknown
for /f "tokens=3-4" %%a in ('query session %username%') do @if "%%b"=="Active" set MY_SESSION_ID=%%a
używając %%a
i %%b
(zamiast %a
i %b
), ponieważ jest w skrypcie. Prawdopodobnie możesz pominąć, @
jeśli cały plik wsadowy jest poniżej @echo off
. Inicjalizacja do unknown
pozwala na obsługę błędów (wykrywanie, czy nie ma linii na wyjściu query session
tego dopasowania). Rozszerzenie obsługi błędów w celu rozpoznawania i reagowania, jeśli na wyjściu
jest wiele pasujących linii, query session
pozostawia się jako ćwiczenie.