오늘은 WMI 를 원격에서 사용하는 방법에 대해 알아보겠다.
WMI는 로컬컴퓨터에서도 가능하지만 원격에 있는 컴퓨터의 정보를 가져오는 것도
가능하다.
이 의미는 자신의 컴퓨터에서 몇대의 컴퓨터의 상태를
script작성을 통해 알 수 있다는 것을 의미한다.
예시 1을 보자
해당 Script는 해당 컴퓨터에 올라가 있는 Service를 확인하기 위한 Script이다.
strComputer가 평상시엔 .(즉 자신의 컴퓨터) 였으나 지금은 IP가 들어가 있는 것을 알 수 있다.
strComputer의 값에는 IP or Hostname이 가능하다.
원격에 접속하는 부분은 이 부분을 확인하면 된다.
Set objWMIService = objSWbemLocator.ConnectServer(strComputer, _
"root\CIMV2", _
strUser, _
strPassword, _
"MS_409", _
"ntlmdomain:" + strDomain)
즉 원격서버정보, 유저ID, Password, 서버 Domain을 입력하면 된다.
그러면 root\CIMV2와 MS_409의 의미는 무엇일까?
root\CIMV2\ms_409
안에는 다양한 WMI의 Class가 등록되어 있다.
http://www.webtropy.com/articles/wmi-namespace.asp?wmi=root-CIMV2-ms_409
해당 링크를 확인하면 해당 Class의 정보를 확인 할 수 있다.
이것을 통해 WMI의 Class를 지정해 줌으로써 더 빠르게 Class들의 정보를 확인할 수 있게 한것을
알 수 있다.
원격 접속은 하나의 Component를 사용하는 개념으로 보면된다.
간단한 예로 Visual Basic의 Ado를 사용하기 위해 해당 Component를 추가한 후
접속 함수와 접속 변수의 값을 설정해 주면 접속이 되는 것과 같은 이치라고 할 수 있겠다.
[예시1] 원격서버(127.0.0.1은 loopback이므로 Local Computer)에 접속하여 현재 실행중인 서비스 확인
strComputer = "127.0.0.1"
strDomain = "Workgroup"
strUser = "유저이름"
strPassword = "유저패스워드"
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objSWbemLocator.ConnectServer(strComputer, _
"root\CIMV2", _
strUser, _
strPassword, _
"MS_409", _
"ntlmdomain:" + strDomain)
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_Service",,48)
For Each objItem in colItems
Wscript.Echo "Caption: " & objItem.Caption
Next