Dies kombiniert Aspekte von Gary Antwort und Oscar Antwort . Wie Gary bemerkte, query session
sieht die Ausgabe von ungefähr so aus
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
oder, in meinem Fall (mit "Benutzer wechseln")
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console gman 1 Active
otherguy 2 Disc
(Ich habe kein RDP eingerichtet, daher kann ich es nicht testen.) Vermutlich besteht die Absicht der Frage darin, die ID der derzeit aktiven Sitzung zu ermitteln. Ich schlage vor, die Ausgabe von query session
nach der aktuellen Sitzung zu durchsuchen :
for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b
auf deren Grundlage das 2., 3. und 4. Wort (was wir hoffen , dass die NUTZERNAME zu sein, [SESSION] ID und STATE) aus jeder Zeile der Ausgabe von query session
auf %a
, %b
und %c
ist, und dann meldet Sitzungs - ID aus der Zeile , in der USERNAME bin ich und STATE ist Active
.
Es stellt sich heraus, dass query session
ein username
Parameter benötigt wird, sodass das oben Gesagte vereinfacht werden kann
for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b
oder
for /f "tokens=3-4" %a in ('query session %username%') do @if "%b"=="Active" echo %a
Um dies in einem Skript (Batch-Datei) zu verwenden, möchten Sie vielleicht sagen
set MY_SESSION_ID=unknown
for /f "tokens=3-4" %%a in ('query session %username%') do @if "%%b"=="Active" set MY_SESSION_ID=%%a
Verwenden von %%a
und %%b
(anstelle von %a
und %b
), weil es in einem Skript enthalten ist. Sie können das wahrscheinlich weglassen, @
wenn sich die gesamte Batch-Datei darunter befindet @echo off
. Die Initialisierung, unknown
mit der Sie die Fehlerbehandlung durchführen können (Ermitteln, ob in der Ausgabe query session
dieser Übereinstimmungen keine Zeile vorhanden ist ). Die Erweiterung der Fehlerbehandlung, um zu erkennen und zu reagieren, ob die Ausgabe von mehrere übereinstimmende Zeilen enthält, query session
bleibt als Übung übrig.