Windows 명령 행을 통해 현재 사용자 세션 ID를 어떻게 검색합니까?
사용자 탭 아래의 작업 목록에서 각 사용자는 세션 ID와 연결됩니다. 원격 응용 프로그램에 사용할 수 있도록 명령 줄을 통해 이것을 검색하고 싶습니다.
Windows 명령 행을 통해 현재 사용자 세션 ID를 어떻게 검색합니까?
사용자 탭 아래의 작업 목록에서 각 사용자는 세션 ID와 연결됩니다. 원격 응용 프로그램에 사용할 수 있도록 명령 줄을 통해 이것을 검색하고 싶습니다.
답변:
이것이 가장 효율적인 방법은 아니지만의 결과를 살펴볼 수 있습니다 tasklist
. 실행중인 각 프로세스의 이름과 세션 번호가 표시됩니다. 로컬로 로그인 한 경우 "console"이라는 세션의 ID를 확인하십시오.
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
편집 :
Query Session
세션 ID를 검색합니다.
d:\>query session
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
tasklist
Pro / Ent OS 버전이 필요하지 않기 때문에 좋습니다. 또한 explorer.exe를 필터링 만 대화 형 세션을 나열 할 수 있습니다 -tasklist /fi "imagename eq explorer.exe"
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%
tasklist
동시에 실행되고있을 가능성이 적습니다 .
이것은 Gary의 답변 과 Oscar의 답변 의 측면을 결합 합니다. Gary가 언급했듯이 출력 결과는 query session
다음과 같습니다.
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
또는 제 경우에는 ( "사용자 전환"사용)
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console gman 1 Active
otherguy 2 Disc
(RDP를 설정하지 않았으므로 테스트 할 수 없습니다.) 아마도 문제의 의도는 현재 활성 세션의 ID를 결정하는 것입니다. query session
현재 세션과 비슷한 결과를 검색하는 것이 좋습니다 .
for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b
출력의 각 행에서 (우리는 USERNAME 될 희망 [SESSION] ID 및 STATE) 둘째, 셋째, 넷째 워드를 할당하는 query session
행 %a
, %b
및 %c
각각 다음 SESSION ID 라인 곳에서보고 USERNAME 님은 나이고 STATE는 Active
입니다.
그것은 그 밝혀 query session
소요 username
파라미터이므로 상기 단순화 될 수있다
for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b
또는
for /f "tokens=3-4" %a in ('query session %username%') do @if "%b"=="Active" echo %a
스크립트 (배치 파일)에서 이것을 사용하려면
set MY_SESSION_ID=unknown
for /f "tokens=3-4" %%a in ('query session %username%') do @if "%%b"=="Active" set MY_SESSION_ID=%%a
스크립트에 있기 때문에 and 대신 %%a
and를 사용 합니다.
전체 배치 파일이 아래에 있는 경우 아마도 생략 할 수 있습니다 . 오류 처리를 수행 할 수 있는 초기화 (
일치 하는 출력에 행이 없는지 감지 ) 출력에 일치하는 선 이 여러 개인 경우 오류 처리를 확장하여 인식하고 반응하면
운동으로 남습니다.%%b
%a
%b
@
@echo off
unknown
query session
query session
세션 이름과 달리 세션 ID는 변수에 저장되지 않으며 쉽게 접근 할 수 없습니다. 나는 그것이 확실하지만 이것을하는 내장 명령 줄 도구를 생각할 수 없습니다.
그러나이 작업을 수행하는 작은 .exe 파일 (C #, .Net 4)을 작성했습니다.
세션 ID를 표시하고 다양한 스크립트 / 기술에서 사용할 수 있도록 리턴 코드로 사용합니다.
이것은 Oscar Beh의 코드를 기반으로합니다.
tasklist
지정된 실행 파일의 모든 인스턴스에 대한 세션 ID (및 기타 정보)를보고합니다. 명령을 실행하면 세션 ID가 표시됩니다. 그의 코드에서 유일하게 잠재적 인 결함은 프로그램의 다중 인스턴스가 있는지 알려주지 않아서 스크립트가 잘못된 결과를 리턴 할 수 있다는 것입니다.
여기서는 tasklist
해당 명령을 실행하는 다른 세션이 없는지 확인하기 위해 모든 인스턴스를보고합니다 .
for /f "tokens=4 delims= " %%G in ('tasklist /FI "IMAGENAME eq tasklist.exe" /NH') do echo Session ID %%G
두 개의 세션 ID가보고되면 스크립트를 다시 실행하십시오.