본문 바로가기

아티클/팁/.NET / Windows

Windows Script Host 개략

ASP(Application Service Provider 말고 Active Server Pages) 프로그래머라면 WScript.Shell이라는 컴퍼넌트를 사용해 본 기억이 있을 것이다. ASP 기술이 스크립트 기반이다보니 프로세스나 여타 프로그래밍 환경에서 사용할 수 있는 기능이 별로 없는 편이어서, 엉뚱하게도 윈도우 서버군에서 관리 작업이나 기타 유지보수 작업을 할 때 유용하게 쓰이는 WSH(Windows Script Host)의 컴퍼넌트를 가져다가 사용하게 된 것.

윈도우의 백그라운드에서 프로그램을 실행시킨다든가, 파일 복사를 한다던가(이건 Scripting.FileSystemObject 객체겠지만), 여튼 여러가지로 유용하게 쓰인다. 사실 개발자보다는 시스템 엔지니어에게 필요한 기술이지만 필요하다면 다 쓰는거지 뭐.

이러한 WSH 기술(좀더 정확히 말하자면 시스템 관리용 스크립팅 기술)은 여러 구성요소로 이루어져 있다 :


- VBScript

ASP도 그렇지만, 윈도우 관리용 스크립팅 환경은 VBScript를 기반으로 하고 있다. 윈도우 OS 환경에서의 스크립트는 Windows Script Host를 통해서 실행하는데, WScript.exe나 CScript.exe 실행 파일로 스크립트를 수행할 수 있다. 두 파일은 GUI 기반이냐 커맨드 라인 기반이냐의 차이 뿐이다. 스크립트 파일은 (항상 그런 것은 아니지만) 대개 .vbs 파일 확장자를 갖는다. 저 확장자가 익숙한가? 그렇다. 최근 수많은 웜의 제작 기반이 되는 VBScript 환경이 바로 이것이다.

커맨드 창을 띄우고(시작 -> 실행 -> 'cmd'를 입력)

CScript.exe test.vbs

혹은,

Test.vbs

만으로도 실행시킬 수 있다. (이 경우 WScript, CScript 둘 중 하나가 기본 스크립팅 호스트로 지정되어 있어야 한다)

관리 작업에는 커맨드 라인 기반이 좀 더 편리한 경우가 많으므로, 커맨드 라인 환경에 익숙지 않은 사람은 조금 연습을 해두는게 좋을지도.


- Windows Script Host ; WScript

Shell, Network, Controller 객체로 구성되어 있다.

Shell의 경우 프로그램을 실행하거나, 바로가기 아이콘에 대한 처리, 시스템 폴더(바탕 화면, 내 문서 ...) 관련 처리, 이벤트 로깅, 레지스트리 처리, 시스템 환경 변수 설정, 특정 프로그램에 대한 키 입력(예를 들면 노트패드를 실행하고 그 노트패드 안에 특정 문자열을 입력한다든가..) 처리, 메시지 박스 처리... 등등의 일을 할 수 있다.

Network의 경우에는, 케냘도 별로 써본 적은 없지만, 네트웍 드라이브/프린터 처리, 사용자/컴퓨터 정보를 얻는데 사용할 수 있다.

Controller의 경우 원격 컴퓨터에서 스크립트를 실행하고 모니터링할 수 있는 기능을 제공한다. (물론 그냥 막 되는건 아니고 설정이 필요하다)

sas_wsh_30c

WSH Diagram


- Script Runtime Library ; Scripting

VBScript 자체에는 파일 관련 라이브러리가 없다. 이는 애초에 JScript와 같이 VBScript가 IE의 클라이언트용 스크립트로 만들어지다보니 그러한 것인데... 뭐 그건 그렇고 어쨌든 그러한 파일 관련 처리를 위해 FileSystemObject라는 객체가 제공되며, 덩달아 Dictionary라는 객체도 제공된다. 자료구조에 대해서 조금이라도 지식이 있다면 Dictionary가 뭔지 알겠지만.. 그냥 여기에서는 배열과 비슷한 것이라고 생각하고 넘어가도 된다.


- ADSI(Active Directory Service Interfaces)

액티브 디렉토리 관리 기능 제공. 뭐 이건 써본적이 없으니 넘어가고.


- WMI(Windows Management Instrumentation)

또 중요한 것 중의 하나가 이 WMI인데, 이 스크립트 작성법과 WMI 질의를 적절히 사용할 수 있다면 시스템 모니터링의 많은 부분을 자동화할 수 있다. WMI는 시스템에 대한 관리, 모니터링, 제어를 통합할 수 있는 환경을 제공하며, 관리자가 Query 형태의 명령을 사용해서 시스템의 어플리케이션, 하드웨어, 서비스, 네트워크 상황을 조회하고, 설정을 변경하며, 모니터링할 수 있는 기능을 제공한다.

WMI Architecture


WMI를 어떻게 사용하는지는 WMI Code Creator v1.0 이 포스트를 잠깐 참고해 보시고. 여기에서는 SQL Server의 성능을 모니터링하는 용도로 사용하고 있지만, 사용에 따라서는 시스템의 네트워크 트래픽을 모니터링하다가 관리자에게 이상 상황을 알린다든가, 특정 어플리케이션이 응답이 없을 경우 경고를 한다든가, 하드디스크의 용량이 부족할 경우 백업 시스템으로 파일을 옮긴다든가... 뭐 여러 관리 작업을 구상하고 구현해 볼 수 있을 것이다.


::: 참고자료 - Scripting Concepts and Technologies for System Administration