Ini menggabungkan aspek jawaban Gary dan jawaban Oscar . Seperti dicatat oleh Gary, output dari query session
terlihat seperti
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
atau, dalam kasus saya (menggunakan "Ganti pengguna")
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console gman 1 Active
otherguy 2 Disc
(Saya tidak memiliki RDP yang diatur, jadi saya tidak dapat mengujinya.) Mungkin maksud dari pertanyaan ini adalah untuk menentukan ID dari sesi yang sedang aktif. Saya sarankan mencari output query session
untuk apa yang tampak seperti sesi saat ini:
for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b
yang menugaskan 2, 3, dan kata-4 (yang kami berharap untuk menjadi USERNAME itu, [SESI] ID, dan NEGARA) dari setiap baris dari output query session
untuk %a
, %b
dan %c
, masing-masing, dan kemudian melaporkan SESI ID dari garis mana USERNAME adalah saya dan STATE adalah Active
.
Ternyata yang query session
mengambil username
parameter, sehingga di atas dapat disederhanakan
for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b
atau
for /f "tokens=3-4" %a in ('query session %username%') do @if "%b"=="Active" echo %a
Untuk menggunakan ini dalam skrip (file batch), Anda mungkin ingin mengatakannya
set MY_SESSION_ID=unknown
for /f "tokens=3-4" %%a in ('query session %username%') do @if "%%b"=="Active" set MY_SESSION_ID=%%a
menggunakan %%a
dan %%b
(bukan %a
dan %b
) karena itu dalam skrip. Anda mungkin dapat mengabaikan @
jika seluruh file batch berada di bawah @echo off
. Inisialisasi untuk unknown
memungkinkan Anda melakukan penanganan kesalahan (mendeteksi jika tidak ada garis dalam output query session
yang cocok). Memperluas penanganan kesalahan untuk mengenali dan bereaksi jika ada beberapa garis yang cocok dalam output query session
dibiarkan sebagai latihan.