명령 줄에서 세션 ID를 어떻게 검색합니까?


24

Windows 명령 행을 통해 현재 사용자 세션 ID를 어떻게 검색합니까?

사용자 탭 아래의 작업 목록에서 각 사용자는 세션 ID와 연결됩니다. 원격 응용 프로그램에 사용할 수 있도록 명령 줄을 통해 이것을 검색하고 싶습니다.


세션 ID의 의미가 확실하지 않습니까?
EBGreen

사용자 탭 아래의 작업 목록에서 각 사용자는 세션 ID와 연결됩니다. 원격 응용 프로그램에 사용할 수 있도록 명령 줄을 통해 이것을 검색하고 싶습니다.
부정적인


%% G는 배치에서 호출하는 경우, % G는 명령 행에서 직접 호출하는 경우

답변:


27

이것이 가장 효율적인 방법은 아니지만의 결과를 살펴볼 수 있습니다 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

커맨드 라인을 통해 검색하려고합니다.
부정적인

1
명령 행에서 tasklist를 입력하십시오.
Gary

1
흠 실제로 당신은 여기에 뭔가있을 수 있습니다. 편집 : tasklist / FI "imagename eq cmd.exe"/ FO list이 출력을 구문 분석 할 계획입니다. 감사!
부정적인

아니면 할 수 있습니다. 니스
부정적인

tasklistPro / Ent OS 버전이 필요하지 않기 때문에 좋습니다. 또한 explorer.exe를 필터링 만 대화 형 세션을 나열 할 수 있습니다 -tasklist /fi "imagename eq explorer.exe"

5
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%

1
/ % "tokens = 4 delims ="% G in ( 'tasklist / FI "IMAGENAME eq tasklist.exe"/ NH')에서 %% G를 % G로 바꾸면 Oscar의 솔루션이 실제로 저에게 효과적이었습니다. SET RDP_SESSION = % G
Paweł Stankowski

2
@ PawełStankowski : 배치 파일에서 실행하면 그 차이입니다 (%%) 또는 콘솔 (%)
토마스 웰러

이로 인해 여러 사용자가 tasklist동시에 실행되고있을 가능성이 적습니다 .
Matthew Lundberg

5

이것은 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 대신 %%aand를 사용 합니다. 전체 배치 파일이 아래에 있는 경우 아마도 생략 할 수 있습니다 . 오류 처리를 수행 할 수 있는 초기화 ( 일치 하는 출력에 행이 없는지 감지 ) 출력에 일치하는 선 이 여러 개인 경우 오류 처리를 확장하여 인식하고 반응하면 운동으로 남습니다.%%b%a%b@@echo offunknownquery sessionquery session


실제 경우에는 여러 세션이 있으면 항상 동일한 사용자 이름을 갖습니다. 그러나 이것은 아마도 일반적인 것이 아닙니다.
Matthew Lundberg

@ MatthewLundberg : 상태는 어떻습니까? 현재 세션 이외의 세션이 "활성"으로 식별됩니까?
G-Man

예, 그들은 활동적입니다. 서버 OS입니다.
Matthew Lundberg

2

세션 이름과 달리 세션 ID는 변수에 저장되지 않으며 쉽게 접근 할 수 없습니다. 나는 그것이 확실하지만 이것을하는 내장 명령 줄 도구를 생각할 수 없습니다.

그러나이 작업을 수행하는 작은 .exe 파일 (C #, .Net 4)을 작성했습니다.

세션 ID를 표시하고 다양한 스크립트 / 기술에서 사용할 수 있도록 리턴 코드로 사용합니다.

MediaFire의 파일에 연결


1

이것은 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가보고되면 스크립트를 다시 실행하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.