알아두면 좋은 IT 지식/General

작업스케쥴러로 배치파일 실행 시 실행 계정을 콘솔세션으로 전환하는 방법

uutopia 2020. 9. 10. 13:16

우선 cmd창에서 사용할 수 있는 명령어 몇개를 알아보자.

아래 명령어 중 일부는 윈도우 서버환경에서만 사용 가능하다.

cmd란 command의 약자로 명령어로 윈도우를 조작할 수 있도록 해주는 프로그램이다.

예전 도스환경과 비슷하다.

윈도우 > 시작 > 실행에 cmd를 입력하면 실행되며 다양한 기능을 사용하기 위해서는 관리자권한으로 실행한다.

 

tscon

 

세션을 다른 세션에 연결한다.

 

ex. tscon 2 /dest:console

세션 ID 2의 세션을 console로 연결한다.

-세션 ID 2에서 작업중인 환경을 console화면에 띄운다. 이 때 기존 2의 연결 끊기게 되고 기존 console의 환경은 연결을 잃게 된다.

-즉, 내가 PC에서 2번 세션ID로 서버에 원격을 붙어서 프로그램을 구동하다가 tscon 2 /dest:console 명령어를 실행하면 내 PC의 원격연결은 끊기고 console화면(서버화면)에 내 작업환경을 띄우게 된다. 그리고 console화면에서 작업중이던 환경은 연결을 잃게 된다.

-여기서 console이란 서버에 직접 붙어있는 연결을 말한다. (서버에 모니터를 연결하면 보이는 화면)


tsdiscon

 

세션의 연결을 끊는다.

 

ex. tsdiscon 0

0번 세션의 연결을 끊는다.


query session

 

현재 접속환경의 세션정보를 보여준다.

 

ex. query session


국세청 등 보안이 강화된 특정 서버에서는 활성화 되어있지 않은 세션이 백그라운드에서 프로그램으로 동작하여 접속하는 방식을 차단하고 있다. 즉, 작업스케쥴러 등을 통해서 연결이 끊긴 상태로 새벽에 배치파일을 실행해서 특정 서버에 접속하면 접속이 차단되는 경우가 있다. 그렇다고 새벽내내 연결을 유지할 수 없을 때 사용할 수 있는 세션이 console 세션이다. 작업이 수행되는 환경을 console세션으로 지정할 경우 해당 연결이 서버에서 직접 작업하는 것으로 인식하여 백그라운드에서도 특정 서버에 접속이 가능하다.

 

사실 현재 세션을 console세션으로 변경하는 명령어는 tscon console만 입력하면 되기 때문에 간단해 보이지만 현실은 그렇게 녹녹하지 않다.

일단 연결이 끊어진 상태에서 bat파일로 tscon console을 실행하면 오류가 발생한다. 아마도 현재 세션의 연결을 찾지 못해서 발생하는 현상으로 보인다. 이 경우 tscon 2 /dest:console와 같이 현재 세션ID(ex. 2)를 직접 입력하는 방식을 사용하면 대부분 해결 되지만 아직 문제가 남아있다.

현재 세션 ID가 지금은 2이더라도 서버가 재부팅 되거나 세션이 연결되고 끊기다 보면 이 세션 ID는 사용자 계정과 1:1로 물려있는 것이 아니기 때문에 변경 될 가능성이 있다.

 

작업스케쥴러로 배치파일을 실행하는 경우에는 세션ID를 지정할 수 없고 사용자 계정을 지정하기 때문에 tscon 명령어를 사용하기 전에 이 사용자 계정의 세션 ID를 확인하는 절차가 필요하다. query session 명령어와 for /f 명령어를 사용해서 명령어를 작성해보자

ex. for /f "token=3" %%a in ('query session administrator') do set sessionId=%%a

for 반복문을 통해서 query session administrator의 결과값 중 3번째 토큰값인 session id를 찾아서 %%a에 지정 후 sessionId로 세팅하는 명령어다.

 

아래는 위 모든 내용을 종합해서 만든 bat파일 작성 예시이다.

 

set userName=administrator

for /f "token=3" %%a in ('query session %administator%') do set sessionId=%%a

tscon %sessionId% /dest:console

"C:\HometaxConnect.exe"

tdiscon %sessionId%

사용자 계정이 administrator일 때 해당 계정의 세션id를 가져와서 console세션으로 전환 후 HometaxConnect.exe라는 프로그램을 정상적으로 실행하고 나서 세션 연결을 끊는 bat파일로 윈도우 작업스케쥴러에 등록 시 정상적으로 동작한다.

 

 

실제로 업무에서 직접 사용한 bat파일로 파일명은 블럭       처리 했다.

실제로 사용해보니 OS별로 query session의 결과값에 session name이 비어있을 경우에 session id를 3번째가 아닌 2번째 토큰으로 인식하는 경우가 있어서 다양한 환경에서도 정상적으로 동작 하도록 tokens=2부분을 추가로 작성했다.

tokens=3문장이나 tokens=2문장 중 하나는 실패하고 하나는 성공할 것이다.


참고사항

 

bat파일 테스트를 위해서 출력결과나 오류결과를 확인하는 방법으로 결과를 파일로 저장하는 방식이 있다.

ex. query session > out.txt 2> error.txt

쿼리실행결과를 out.txt파일에 저장하고, 오류발생 시 오류결과를 error.txt에 저장한다.

 

이처럼 cmd명령어를 통한 bat파일 실행만으로도 다양한 작업을 시도 할 수 있다.