CIM 스튜디오를 사용해서 IIS 7.0 WMI 공급자의 정보 알아내기

등록일시: 2007-12-09 16:06,  수정일시: 2015-07-25 13:35
조회수: 8,012
이 문서는 IIS 기술을 널리 알리고자 하는 개인적인 취지로 제공되는 번역문서입니다. 이 문서에 대한 모든 저작권은 마이크로소프트에 있으며 요청이 있을 경우 언제라도 게시가 중단될 수 있습니다. 번역 내용에 오역이 존재할 수 있고 주석은 번역자 개인의 의견일 뿐이며 마이크로소프트는 이에 관한 어떠한 보장도 하지 않습니다. 번역이 완료된 이후에도 대상 제품 및 기술이 개선되거나 변경됨에 따라 원문의 내용도 변경되거나 보완되었을 수 있으므로 주의하시기 바랍니다.

서론 *

본문에서는 WMI 네임스페이스에 대한 비주얼 인터페이스를 제공해주는 도구인, WMI CIM 스튜디오를 살펴보겠습니다. IIS 7이 제공하는 새로운 WebAdministration 네임스페이를 사용해서 스크립트를 한 줄도 작성하지 않고 네임스페이스에 존재하는 클래스들의 목록을 얻어내는 방법이나 클래스의 속성과 메서드를 살펴보는 방법, 그리고 "restriction" 등의 특정 단어를 사용해서 속성과 클래스를 검색하는 방법 등을 알아볼 것입니다.

기본적으로 WMI를 사용하는 모든 작업에서는 네임스페이스에 연결하는 과정이 선행돼야 합니다. 본문의 첫 번째 단원에서는 CIM 스튜디오를 다운로드 받고 실행하는 방법과 전체 네임스페이스 목록을 얻는 방법, 그리고 특정 네임스페이스에 연결하는 방법을 살펴봅니다. 두 번째 단원에서는 네임스페이스에 존재하는 클래스들의 속성과 메서드, 그리고 특정 속성이 읽기 전용인지 또는 기록이 가능한지 등과 같은 속성과 메서드의 메타데이터를 살펴보는 방법을 소개합니다. 마지막으로는 개체의 인스턴스를 얻은 다음 속성을 설정해보거나 메서드를 실행해보면서 직접 개체를 사용해보겠습니다. WMI는 시각적이며 직관적입니다.

* 본문을 비롯해서 앞으로 업데이트 될 몇 가지 문서들에서는 WMI에 관한 내용을 다루고 있습니다. 그 중, 본문에서는 가장 기초적인 내용들이 다뤄집니다. 그리고, 위에서 얘기한 것처럼 코드는 단 한 줄도 작성하지 않습니다. 반면, 나머지 문서들에서는 보다 실질적인 활용 사례들이 제시되고 코드도 작성해 보게 될텐데, 이 때 사용되는 언어는 VBScript입니다. 따라서, 본문을 비롯한 일련의 번역문들은 비단 IIS 7뿐만 아니라 WMI 자체에 관심을 갖고 있는 분들께도 많은 도움이 될 것으로 믿습니다.

본문의 거의 모든 내용들은 네임스페이스만 변경하면 곧바로 다른 부분에 동일하게 적용 가능하며, 나머지 문서에서 제시될 VBScript 코드들은 대부분 ASP 프로그램으로 쉽게 포팅이 가능합니다. 뿐만 아니라, .NET 클래스 라이브러리에서 제공되는 System.Management 네임스페이스를 사용하면 WMI를 .NET에서 활용하는 것도 그리 어렵지 않습니다.

시작하기 전에

IIS 7 설치 *

본문에서 제공하는 모든 내용을 따라해보려면 반드시 IIS 7이 설치되어 있어야 합니다. 만약, 웹 브라우저에 http://localhost/라고 입력했을 때, IIS 7의 기본 시작 페이지가 나타난다면 이미 IIS 7이 설치된 것입니다. 만약, IIS 7이 설치되어 있지 않다면 Windows Vista Beta 2에 IIS 7을 설치하는 방법 문서의 지시를 참고하여 IIS 7을 설치하도록 하십시오.

WMI 제공자 설치

윈도우 비스타에서는 웹 관리 도구 (롱혼 서버에서는 관리 도구) 하위의 IIS 관리 스크립트 및 도구 구성 요소를 선택해서 IIS 7 WMI 제공자를 설치할 수 있습니다. 윈도우 비스타에서는 Windows 기능 대화 상자의 인터넷 정보 서비스 하위에서, 롱혼 서버에서는 서버 관리자의 Web Server (IIS) 역할에서 해당 구성 요소를 찾을 수 있습니다.

WMI 도구 설치 (CIM 스튜디오 포함)

본문을 시작하기 전에 마이크로소프트 다운로드 센터에서 WMI 도구를 다운로드 받고 설치합니다.

필수 권한 (사용자 계정 제어 (UAC))

그리고, WebAdministration WMI 네임스페이스에 연결하기 위해서는 반드시 관리자 권한이 필요합니다. 결과적으로 여러분들은:

  1. 롱혼 서버에 내장 관리자 계정으로 로그인하거나, 또는
  2. 관리자 그룹에 속한 계정으로 로그인하고 사용자 계정 제어(UAC)를 비활성화 시키거나, 또는
  3. 관리자 그룹에 속한 계정으로 로그인하고 사용자 계정 제어(UAC)를 활성화 시켜야 합니다.

만약, 여러분들이 1번이나 2번에 속하는 경우라면 본문을 진행해나가는 도중 어떠한 권한 문제도 접하지 않을 것입니다. 그러나, 3번에 해당하는 경우라면 권한 관련 오류를 만나게 될 것입니다. 그런 경우에는 먼저 관리자 권한으로 명령 프롬프트를 실행해서 권한을 상승시키고, 이 명령 프롬프트를 통해서 CIM 스튜디오를 실행하는 방법으로 문제를 해결할 수 있습니다.

명령 프롬프트를 관리자 권한으로 실행시키 위해서는, 시작 메뉴에서 모든 프로그램을 클릭하고 보조프로그램 메뉴에서 명령 프롬프트를 마우스 오른쪽 버튼으로 클릭한 다음, "관리자 권한으로 실행" 메뉴를 선택합니다.

권한이 상승된 명령 프롬프트에서 CIM 스튜디오를 실행시키려면:

  • 명령 프롬프트를 관리자 권한으로 실행합니다.
  • "%systemdrive%\Program Files\WMI Tools\studio.htm"라고 입력합니다.

백업 생성 **

본문의 작업이 모두 끝난 다음, 시스템을 다시 초기 상태로 복원하기 위해서는 핵심 IIS 구성 설정 파일들을 백업해둬야 합니다.

  • 명령 프롬프트를 실행합니다.
  • %windir%\system32\inetsrv\appcmd add backup IIS 7_WMI_CIMStudioLab 이라고 입력합니다.

그러면, 명령이 정상적으로 실행된 경우, 다음과 같은 결과 메시지가 출력될 것입니다:

BACKUP object "IIS 7_WMI_CIMStudioLab" added

본문의 모든 작업이 끝나면 백업을 사용해서 IIS를 본래의 상태로 복구합니다.

  • 명령 프롬프트를 실행합니다.
  • %windir%\system32\inetsrv\appcmd restore backup IIS 7_WMI_CIMStudioLab 이라고 입력합니다.

그러면, 명령이 정상적으로 실행된 경우 다음과 같은 결과 메시지가 출력될 것입니다:

Restored configuration from backup "IIS 7_WMI_CIMStudioLab"

* 기본적으로 본문의 원문은 2007년 4월 경에 비스타와 2008 베타 3을 기준으로 작성된 문서입니다. 그러나, 번역문은 가장 최신 버전인 RC1에서 거의 대부분의 테스트를 마친 결과를 반영한 것입니다. 결과만 얘기하면 사소한 몇 가지를 제외하고는 큰 변화는 존재하지 않습니다.

** 직접 테스트를 해 본 바에 따르면, 백업을 생성하는 명령은 비스타와 RC1에서 모두 정상적으로 작동되었으나, 복원 명령어의 경우에는 비스타 환경에서 오류가 발생하였고, RC1에서는 정상적으로 동작하는 것을 확인할 수 있었습니다. 물론, 이 문제는 단지 필자의 비스타 환경에만 국한된 문제일 수도 있을 것입니다.

구글링과 몇 가지 테스트 결과에 따르면 appcmd restore backup 명령어는 기본적으로 복원 직전에 웹 서비스를 중지하고 복원을 마친 다음 다시 자동적으로 웹 서비스를 시작시킨다고 합니다. 모든 비스타에서 동일한 문제가 발생하는지는 확인할 수 없었으나, 최소한 필자의 비스타에서는 바로 이 부분에 문제가 발생하는 것 같았습니다. 즉, 수동으로 웹 서비스를 중지시킨 다음, appcmd restore backup 명령어를 실행시킬 때 /stop:false 옵션을 추가해서 서비스 자체에는 영향을 미치지 않도록 지정하고 다시 수작업으로 웹 서비스를 실행시키면 정상적으로 작업이 이뤄졌습니다.

WebAdministration 네임스페이스 연결

먼저, 시작 메뉴에서 모든 프로그램을 선택하고 WMI Tools 메뉴에서 WMI CIM Studio를 실행합니다.

이 때, 만약 다음과 같은 대화 상자가 나타난다면 "Close" 버튼을 클릭하십시오.

그러면, 인터넷 익스플로러 기반의 WMI CIM 스튜디오가 실행되는데 노란색 정보 막대가 나타나서 인터넷 익스플로러에서 액티브 콘텐츠가 차단되었음을 알리면 정보 막대를 오른쪽 버튼으로 클릭하고 "차단된 콘텐츠 허용..." 옵션을 선택하십시오. 그러면, 보안 경고 메시지가 나타나서 이 파일의 액티브 콘텐츠를 정말로 실행할 것인지를 다시 한 번 확인합니다. "예" 버튼을 클릭합니다.

노트: 다음부터 이 보안 경고를 보고 싶지 않다면 인터넷 익스플로러의 우상단의 도구 메뉴를 클릭하고 인터넷 옵션 메뉴를 선택한 다음, 고급 탭으로 이동합니다. 그리고, 설정 목록의 보안 영역에서 "[내 컴퓨터]에 있는 파일에서 액티브 콘텐츠가 실행되는 것을 허용" 옵션을 체크하고 "확인" 버튼을 클릭합니다.

이제 CIM 스튜디오가 실행되고 다음과 같은 대화 상자가 나타나게 됩니다. 이 대화 상자를 이용하면 자신이 연결하고자 하는 WMI 네임스페이스를 지정할 수 있습니다. 빨간색으로 강조된 "Browse for Namespace" 버튼을 마우스로 클릭합니다.

그러면, 다음과 같이 네임스페이스 조회를 위한 대화 상자가 나타납니다. "Connect" 버튼을 클릭합니다.

로그인 대화 상자가 나타납니다. "OK" 버튼을 클릭합니다.

그러면, 루트 네임스페이스에 연결되고 대화 상자에는 그 하위에 존재하는 사용 가능한 모든 네임스페이스들이 트리뷰 형태로 나타납니다. 스크롤을 내려서 IIS 7 WMI 네임스페이스인 WebAdministration을 찾고 아이콘을 더블 클릭해서 해당 네임스페이스에 연결합니다.

다시 로그인 대화 상자가 나타납니다. 역시 "OK" 버튼을 클릭합니다.

정상적으로 WebAdministration 네임스페이스에 연결되었다면 WMI CIM 스튜디오의 좌측 패인은 다음 이미지와 비슷한 모습을 하고 있을 것입니다. "root\WebAdministration" 네임스페이스가 다음과 같은 모습을 보여주고 있는지 확인해보십시오.

클래스 탐색

WebAdministration 네임스페이스에 존재하는 클래스들의 목록은 다음 이미지와 비슷한 모습을 보여줍니다. 붉은색 사각형 내부에 존재하는 클래스들이 WebAdministration 제공자의 기본 클래스들이며 나머지 두 개의 밑줄 문자로 시작하는 클래스들은 WebAdministration 제공자와 직접적인 연관이 없는 WMI의 기본 클래스들입니다.

트리뷰에서 Object 클래스 노드를 확장한 다음, 다시 그 하위의 ConfiguredObject 클래스 노드를 확장합니다. 그러면, 다음과 같은 사이트 및 응용 프로그램 등 웹 서버 개체들과 비슷한 항목들이 위치한 트리뷰의 모습을 보게 될 것입니다. 바로 이 개체들이 WebAdministration 네임스페이스의 핵심 부분으로, 대부분의 시간을 이 개체들을 사용해서 작업하는데 사용하게 될 것입니다.

이번에는 트리뷰에서 Site 개체를 선택해봅니다. 그러면, CIM 스튜디오 윈도우의 우측 패인에 해당 개체의 정보가 제공됩니다. 다음 이미지는 Properties 탭을 보여주는데 이 탭에서는 Site 개체의 속성들의 이름과 형식, 그리고 그 값에 대한 정보가 제공됩니다. 대부분의 Value 컬럼값이 "<empty>" 라는 문자열로 설정되어 있다는 점에 주목하십시오. 그 이유는 지금 우리들이 살펴보고 있는 것이 Site 개체의 인스턴스가 아니라 Site 개체의 선언이기 때문입니다. (인스턴스에 관해서는 뒤에서 다시 살펴볼 것입니다.) 그리고, 두 개의 밑줄 문자로 시작하는 모든 속성들은 표준 WMI 클래스 속성들로 WMI의 기초적인 부분들을 살펴보는 동안, 잠시 머리속에서 잊고 있어도 무방합니다.

그렇다면, Site 개체의 Id 속성이 읽기 전용인지 쓸 수 있는지 알아보고 싶다면 어떻게 해야 할까요? 먼저, Id 로우를 마우스 오른쪽 버튼으로 클릭하고 "Property Qualifiers..." 메뉴를 선택합니다. 그러면, 다음 이미지와 같은 Id 속성의 제한자 정보를 제공하는 대화 상자가 나타납니다. 제한자란 해당 속성에 대한 메타데이터 정보입니다. 그리고, 여기에서 "read" 제한자와 "write" 제한자는 각각 해당 속성을 읽을 수 있는지, 그리고 쓸 수 있는지를 나타내는데, Id 속성의 경우 "read" 제한자와 "write" 제한자가 모두 true로 설정되어 있으므로, 이 속성은 읽을 수도 있고 쓸 수도 있다는 것을 알 수 있습니다.

이번에는 "Cancel" 버튼을 클릭해서 제한자 정보 대화 상자를 닫고, Methods 탭을 선택해서 Site 개체의 메서드들을 살펴봅니다.

만약, Create 메서드의 인자들에 관한 정보를 알아보고 싶다면 어떻게 해야 할까요? 먼저 Create 메서드의 로우를 마우스 오른쪽 버튼으로 클릭하고, "Edit Method Parameters" 메뉴를 선택합니다. 그러면, 다음 이미지와 같이 Create 메서드의 모든 인자들의 목록이 출력된 대화 상자가 나타나고, 메서드의 리턴 형식은 대화 상자의 하단에 나타납니다. 메서드의 인자들에 대한 어떠한 수정도 하지 않도록 주의하고, 오직 메서드 인자들의 정보를 살펴보기 위한 목적으로만 이 대화 상자를 사용하십시오.

대화 상자의 내용을 모두 살펴봤으면 "Cancel" 버튼을 클릭해서 대화 상자를 닫습니다.

다시 오른쪽 패인의 Properties 탭을 클릭해서 Site 개체의 속성들을 살펴봅니다. Bindings 속성을 살펴보면 속성의 형식으로 "array of object:BindingElement"라는 값이 설정되어 있는데, 이는 BindingElement 개체의 배열이라는 의미입니다. 아마 이렇게 설명을 드리면 여러분은 십중팔구 BindingElement 클래스에 어떤 속성들이 존재하는지 궁금해졌을 것이고, 자연스럽게 BindingElement 클래스를 찾아서 살펴보고 싶어졌을 것입니다. 그렇다면 다음과 같이 해보시기 바랍니다.

다음 이미지에 붉은색으로 표시된 "Search" 버튼을 클릭합니다.

그러면, 클래스 검색을 위한 대화 상자가 나타나는데, 텍스트 박스에 "BindingElement"라고 입력하고 "Go!" 버튼을 클릭하면 "Search results:" 목록에 "BindingElement"에 해당하는 검색 결과가 출력됩니다.

검색 결과에서 BindingElement 항목을 마우스로 더블 클릭하면 BindingElement 클래스 정의로 이동합니다.

개체 인스턴스 얻기

다시 검색 기능을 사용해서 Site 개체로 돌아옵니다. 그리고, 붉은색 사각형으로 표시된 "Instances Of" 버튼을 클릭해서 Site 개체의 모든 인스턴스를 살펴봅니다.

그러면, 다음과 같이 서버에 존재하는 모든 Site 개체의 인스턴스가 CIM 스튜디오 우측 패인에 파란색 텍스트로 나타납니다. Site 개체의 인스턴스에 대한 상세 정보를 살펴보기 위해서 Default Web Site를 마우스로 더블 클릭합니다.

이제 CIM 스튜디오에는 Default Web Site의 정보가 출력됩니다. 우측 패인의 상단에는 사이트의 이름이 출력되고 Property 탭의 속성들의 값으로는 앞에서 살펴본 "<empty>" 문자열 대신 실제값이 나타나는 것을 볼 수 있습니다. 그러나, "LogFile" 속성의 Value 컬럼에는 실제값 대신 Object라는 이름의 버튼이 나타나는 것을 확인할 수 있는데, 이 "Object" 버튼을 클릭해보겠습니다.

그러면, 다음과 같이 SiteLogFile 개체의 속성들을 보여주는 대화 상자가 나타납니다. 이 개체의 속성들은 로깅을 활성화하거나 비활성화하고, 로그 파일의 형식을 결정하거나 로그 파일이 저장될 디렉터리를 지정하는 등의 역할을 합니다.

목록에서 LocalTimeRollover 속성의 Value 필드를 마우스로 클릭합니다. 그리고, 드롭다운 컨트롤을 클릭해보면 이 속성에 적용할 수 있는 모든 옵션들이 나타나는데, 그 중에서 "true"를 선택합니다. 그러면, 해당 필드의 텍스트 값이 "true"로 변경되고, 텍스트의 색은 수정되었음을 의미하는 파란색으로 나타납니다.

그리고, "OK" 버튼을 클릭해서 대화 상자를 닫습니다. 그러면, LogFile.LocalTimeRollover 속성이 수정되었기 때문에, 다음 이미지에서 붉은색 사각형으로 표시된 것처럼 "Save" 버튼이 활성화되어 있을 것입니다. "Save" 버튼을 클릭합니다.

방금 우리가 WMI CIM 스튜디오를 사용해서 변경한 속성의 내용을 구성 설정 파일에서 확인하려면, 실행 메뉴에 notepad %windir%\system32\inetsrv\applicationHost.config를 입력합니다. 그리고, 메모장이 열리면 편집 메뉴에서 찾기 메뉴를 클릭하고 "localTimeRollover"를 입력해서 새로 추가된 구성 설정값을 검색합니다. 검색된 내용을 살펴보면 logFile 구성 설정 섹션의 localTimeRollover 속성값이 "true"로 설정되어 있으며, 다음의 XML과 비슷한 모습을 보이고 있을 것입니다.

<site name="Default Web Site" id="1">
  <application path="/">
    <virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot" />
  </application>
  <bindings>
    <clear />
    <binding protocol="http" bindingInformation="*:80:" />
  </bindings>
  <logFile localTimeRollover="true" />
</site>

메모장을 닫습니다. (만약, 변경된 내용을 저장할 것인지를 물어보면 "저장하지 않음" 버튼을 클릭합니다.) 그리고 이번에는 Site 개체의 메서드 중 하나를 실행시켜 보겠습니다. Methods 탭을 클릭한 다음, GetState 메서드를 마우스 오른쪽 버튼으로 클릭하고 "Execute Method" 메뉴를 선택합니다. 그리고, "Execute" 버튼을 클릭합니다.

그러면, 리턴값으로 1 또는 "Started"가 리턴됩니다. 그렇다면, 이 리턴값의 의미가 무엇인지는 어떻게 알 수 있을까요? "Close" 버튼을 클릭해서 대화 상자를 닫습니다. 그리고, 다시 GetState 메서드를 마우스 오른쪽 버튼으로 클릭하고 "Method Qualifiers..." 메뉴를 선택합니다. 그러면, ValueMap을 비롯하여 리턴값이 사람이 읽을 수 있는 데이터와 어떻게 연결되는지를 설명해주는 Values 등을 포함한 GetState 메서드의 메타데이터 정보가 나타납니다. Values 항목의 "Array" 버튼을 눌러보면 각각의 상태들을 살펴볼 수 있습니다. *

노트: 저는 CIM 스튜디오상에서 어떻게 인자가 있는 메서드를 실행시키는지 알지 못합니다. 만약 방법을 알고 계신다면 제게 알려주시기 바랍니다. **

* 비스타에서는 본문에서 설명하는 것과 정확하게 동일한 결과가 나타나는 것을 확인할 수 있었지만, RC1에서는 ValueMap 항목은 나타났으나 Values 항목은 나타나지 않았으며 대신 bypass_getobject라는 새로운 항목이 나타났습니다.

** 인자가 존재하는 메서드를 실행하는 방법도 그리 어렵지 않습니다. 먼저 본문의 설명하는 방법대로 사이트의 인스턴스를 얻습니다. 그리고, GetSection 메서드에 대해 "Execute Method" 메뉴를 실행합니다. 이 메서드는 지정한 구성 설정 섹션의 정보를 얻을 때 사용되는 메서드로, 다음과 같은 대화 상자가 나타날 것입니다.

이 대화 상자에서 볼 수 있는 것처럼 GetSection 메서드는 문자열 형식의 SectionName 인자와 개체 형식의 Section 인자를 받습니다. 여기에서 주의할 부분은 각 인자의 가장 처음 컬럼으로, 이 컬럼에 지정된 화살표의 방향에 따라 INPUT 인자인지 OUTPUT 인자인지를 알 수 있습니다. 즉, GetSection 메서드는 SectionName 인자에 값을 얻고자하는 구성 설정 섹션 이름을, 그리고 Section 인자에는 빈 개체(본문에서 배운 방법을 사용하면 SectionInformation 개체라는 것을 금방 알 수 있습니다.)를 넣고 실행하면, Section 인자에 전달된 개체에 SectionName 인자에 지정한 섹션의 정보를 설정하여 돌려주는 것입니다.

그러면, 먼저 문자열 형식인 SectionName 인자의 Value 컬럼에는 "LogSection"라고 문자열을 직접 입력해봅니다. 아마 정상적으로 입력 될 것입니다. 그러나, Section 인자는 개체 형식이기 때문에 값을 입력하려고 하면 다음과 같은 대화 상자가 나타나게 됩니다.

즉, 개체를 지정해야 하므로 구체적으로 어떤 형식의 개체를 지정할 것인지를 지정해 주어야만 하는 것입니다. Class 텍스트 박스에 "SectionInformation"이라고 입력하고 엔터를 눌러보면, Properties 탭에 빈 내용들이 채워지게 됩니다. 개체의 속성값들이 모두 비어있다는 점에 주의하시기 바랍니다.

이제 "OK" 버튼을 클릭해서 대화 상자를 닫고 다시 "Execute" 버튼을 클릭해보면, 메서드가 정상적으로 실행될 것입니다. 그러나, 이 메서드에는 리턴값이 존재하지 않으므로, 결과값을 보려면 다시 Section 인자의 Value 컬럼에 위치한 "Object" 버튼을 눌러봐야 합니다. 그리고, 그 결과는 다음과 같습니다.

방금 전과는 달리 많은 값들이 채워져 있는 것을 볼 수 있습니다.

요약

본문에서는 CIM 스튜디오를 사용해서 WMI 네임스페이스에 연결하는 방법과 클래스를 검색하는 방법, 클래스에서 속성이나 메서드를 찾는 방법, 속성의 읽기 전용 여부를 알아내는 방법, 메서드의 파라메터를 알아내는 방법, 개체의 인스턴스를 얻어내는 방법, 개체 인스턴스의 속성을 사용하는 방법, 그리고 내부 개체의 속성을 살펴보는 방법 등을 배웠습니다. *

* 이미 앞에서 설명한 것처럼 본문은 말하자면 워밍업에 해당합니다. 다음 문서에서부터는 본문에서 배운 내용들을 활용해서 직접 스크립트를 작성하는 방법들을 살펴볼 것입니다.