Windows

WMI 스크립팅 입문: 1부 (2002년 10월 7일)

_침묵_ 2005. 12. 20. 00:42

http://www.microsoft.com/Korea/MSDN/columns/Contents/scripting/scripting06112002/

 

WMI 스크립팅 입문: 1부

Greg Stemp, Dean Tsaltas, Bob Wells
Microsoft Corporation

Ethan Wilansky
Network Design Group

요약:Scripting Guys의 첫 번째스크립팅 클리닉칼럼은 WMI 스크립팅 라이브러리를 사용하여 유용한 Windows 시스템 관리 스크립트 배열을 만드는 방법에 대해 설명합니다.

Microsoft WMI(Windows Management Instrumentation)는 Microsoft의 기밀 사항으로,WMI는 Windows에 대한 Microsoft의 주요 관리 기술입니다. 이것은 어떤 의미입니까? Windows 서버와 워크스테이션을 관리하는 경우 또는 Windows 관리 응용 프로그램을 만들 경우 WMI를 알고 있어야 합니다. 이 기사는 WMI 특히, WMI 스크립팅 라이브러리를 사용하여 Windows 시스템 관리 스크립트 배열을 만드는 방법을 설명하는 시리즈의 첫 번째 기사입니다.

시작하기 전에스크립팅 클리닉을 진행할 기회를 제공한 Andrew Clinick에게 다시 한 번 감사드립니다. Andrew가 자신의 마지막 칼럼에서 더 많은 정보를 제공할 계획이라고 말했을 때 여러분은 그가 농담하는 것이 아니라는 것을 알 수 있었을 것입니다. 사실은 Andrew가 현재 다른 프로젝트를 진행하고 있기 때문에 자신이 중단한 일을 저희가 다시 진행해주기를 정중하게 요청했습니다.스크립팅 클리닉에 대해 Andrew가 설정한 난이도가 높은 관계로 처음에는 내키지 않았지만 기꺼이 맡기로 했습니다.

그럼, 저희에 대해 소개하겠습니다. 저희는 Microsoft Windows Server 2003 Resource Kit의 일부로 제공될 새 설명서인 System Administration Scripting Guide를 집필한Scripting Guys라는 팀입니다.

WMI란?

원래 1998년 Windows NT 4.0 서비스 팩 4의 추가 구성 요소로 릴리스된 WMI는 Windows 2000, Windows XP 및 Windows Server 2003 운영 체제 제품군에 구축된 핵심 관리 기술입니다. DMTF(Distributed Management Task Force)에 의해 발견된 업계 표준을 기반으로 한 WMI는 거의 모든 Windows 리소스를 액세스하고 구성하고 관리하고 모니터링할 수 있는 수단이자 통로입니다.

WMI의 기능을 이해하려면 작년에 그리고 현재까지 Windows 워크스테이션과 서버를 관리하고 모니터링했던 방법을 생각해 보십시오. 디스크, 이벤트 로그, 파일, 폴더, 파일 시스템, 네트워크 구성 요소, 운영 체제 설정, 성능 데이터, 프린터, 프로세스, 레지스트리 설정, 보안, 서비스, 공유, 사용자, 그룹 등과 같은 Windows 리소스를 관리하는 수많은 그래픽 관리 도구를 사용해 봤거나 현재 사용하고 있을 것입니다.

그래픽 관리 도구가 기능적인 관리 솔루션을 제공하긴 했지만 그들의 공통점은 무엇일까요? 한 가지 대답은 WMI 이전에는 모든 Windows 그래픽 관리 도구가 Windows 리소스를 액세스하고 관리하는 데 Win32 API(Application Programming Interface)에 의존했다는 것입니다. 그 이유는 무엇일까요? WMI 이전에는 Win32 API를 통해서만 프로그래밍 방식으로 Windows 리소스에 액세스할 수 있었기 때문입니다. 대부분의 스크립팅 언어에서 Win32 API를 직접 호출할 수 없기 때문에 널리 사용되고 있는 스크립팅 언어를 사용하여 일반 시스템 관리 작업을 자동화하는 쉬운 방법이 없는 이러한 상황이 Windows 시스템 관리자에게 남겨진 것입니다. WMI는 모든 Windows 리소스를 외부 세계에 설명하고 드러내어 일관된 모델과 프레임워크를 제공함으로써 이러한 문제를 변화시켰습니다. 그리고 무엇보다도 시스템 관리자는 WMI 스크립팅 라이브러리를 사용하여 WMI를 통해 게시된 Windows 리소스를 관리할 시스템 관리 스크립트를 만들 수 있습니다.

Windows 스크립트 호스트와 Microsoft Visual Basic Scripting Edition(VBScript) 또는 COM 자동화를 지원하는 모든 스크립트 언어(예: ActiveState Corporation의 ActivePerl)를 사용하여 다음과 같은 기업용 시스템, 응용 프로그램 및 네트워크를 관리하고 자동화하는 스크립트를 작성할 수 있습니다.

  • Windows Server 2003, Windows XP Professional 및 Windows 2000 시스템 관리스크립트를 작성하여 성능 데이터를 검색하고 이벤트 로그, 파일 시스템, 프린터, 프로세스, 레지스트리 설정, 스케줄러, 보안, 서비스, 공유 및 여러 가지 기타 운영 체제 구성 요소와 구성 설정을 관리할 수 있습니다.
  • 네트워크 관리WMI 기반 스크립트를 만들어 DNS, DHCP 및 SNMP 사용 장치와 같은 네트워크 서비스를 관리할 수 있습니다.
  • 실시간 상태 모니터링WMI 이벤트 가입을 사용하여 발생할 때마다 이벤트 로그 항목, 파일 시스템과 레지스트리 수정 및 기타 실시간 운영 체제 변경 사항을 모니터링하고 응답할 스크립트를 작성할 수 있습니다. 개념적으로 WMI 이벤트 가입 및 알림이 WMI에 대해 갖는 의미는 SNMP 트랩이 SNMP 세계에 대해 갖는 의미와 같습니다.
  • Windows .NET Enterprise Server 관리Microsoft Application Center, Operations Manager, Systems Management Server, Internet Information Server, Exchange Server 및 SQL Server를 관리할 스크립트를 작성할 수 있습니다.

WMI 스크립팅 빠른 시작

WMI 스크립팅에 대한 개념을 파악할 수 있도록 하기 위해 원격의 Windows 기반 컴퓨터에 설치된 총 실제 메모리 양을 검색하는 간단한 작업을 살펴보겠습니다. WMI 이전에는 타사의 도구를 추가하지 않고서는 스크립트를 사용하여 이러한 작업을 쉽게 수행할 수 없었습니다. 사실 WMI 이전에 운영 체제 도구에 포함된 도구를 사용하여 컴퓨터에 설치된 메모리의 양을 결정하는 유일한 방법은 시스템 속성 대화 상자를 사용하는 것이었습니다. 현재는 제공되는 WMI가 대상 컴퓨터에 설치되어 사용자가 이 컴퓨터에 대한 관리자 액세스 권한을 갖게 되므로 목록 1에 표시된 스크립트처럼 간단한 WMI 스크립트를 사용하여 원격 Windows 컴퓨터에 설치된 실제 메모리의 양을 검색할 수 있습니다.

목록 1. WMI 및 VBScript를 사용하여 총 실제 메모리 검색

strComputer = "atl-dc-01" Set wbemServices = GetObject("winmgmts:\\" & strComputer) Set wbemObjectSet = wbemServices.InstancesOf("Win32_LogicalMemoryConfiguration") For Each wbemObject In wbemObjectSet WScript.Echo "총 실제 메모리(kb): " & wbemObject.TotalPhysicalMemory Next

목록 1의 예제 스크립트를 실행하려면 이 스크립트를 복사하여 원하는 텍스트 편집기에 붙여넣고 strComputer 변수에 할당된 값을 도메인의 유효한 WMI 사용 가능 컴퓨터로 변경하고 .vbs 확장명을 가진 스크립트로 저장한 다음, 그림 1에 나타난 대로 이 스크립트를 실행합니다.

사용자 삽입 이미지

그림 1. GetMemory.vbs 출력

약간의 마술을 부려서 오타만 없다면 콘솔에 에코된 대상 컴퓨터의 실제 메모리 양이 나타납니다.

목록 1에 제공된 것과 동일한 기본 단계를 사용하여 WMI를 통해 게시된 Windows 리소스에서 구성 및 상태 정보를 검색할 수 있다는 것이 아직 명백하게 드러나지 않았으므로 "6줄의 스크립트를 사용하여 정말로 컴퓨터의 메모리 양을 가져올 수 있습니까?"라고 여러분이 묻기 전에 저희도 정중하게 같은 의문을 가져보겠습니다.

원격 컴퓨터에 설치된 모든 서비스 이름, 상태 및 시작 유형을 검색하려 한다고 가정합시다. 목록 2의 예제 스크립트는 목록 1에 사용된 동일한 기본 단계를 사용합니다.

목록 2. WMI 및 VBScript를 사용한 서비스 정보 검색

strComputer = "atl-dc-01" Set wbemServices = GetObject("winmgmts:\\" & strComputer) Set wbemObjectSet = wbemServices.InstancesOf("Win32_Service") For Each wbemObject In wbemObjectSet WScript.Echo "표시 이름: " & wbemObject.DisplayName & vbCrLf & _ " 상태: " & wbemObject.State & vbCrLf & _ " 시작 모드: " & wbemObject.StartMode Next

목록 2를 실행하면 그림 2에 표시된 출력이 생성됩니다.

사용자 삽입 이미지

그림 2. GetServices.vbs 출력

서비스에는 관심이 없지만 Windows 이벤트 로그에서 레코드를 검색해야 한다고 가정합시다. 즉, 목록 1의 스크립트 템플릿을 사용하여 목록 3에 표시된 대로 Windows 이벤트 로그를 쉽게 읽을 수 있습니다. 목록 3을 실행하기 전에 이벤트 로그에 수천 개의 레코드가 포함된 경우 예제 스크립트를 실행하는 데 오랜 시간이 걸릴 수 있다는 점을 주목하십시오.

목록 3. Windows 이벤트 로그 레코드 읽기

strComputer = "atl-dc-01" Set wbemServices = GetObject("winmgmts:\\" & strComputer) Set wbemObjectSet = wbemServices.InstancesOf("Win32_NTLogEvent") For Each wbemObject In wbemObjectSet WScript.Echo "로그 파일: " & wbemObject.LogFile & vbCrLf & _ "레코드 번호: " & wbemObject.RecordNumber & vbCrLf & _ "종류: " & wbemObject.Type & vbCrLf & _ "생성된 시간: " & wbemObject.TimeGenerated & vbCrLf & _ "소스: " & wbemObject.SourceName & vbCrLf & _ "범주: " & wbemObject.Category & vbCrLf & _ "범주 문자열: " & wbemObject.CategoryString & vbCrLf & _ "이벤트: " & wbemObject.EventCode & vbCrLf & _ "사용자: " & wbemObject.User & vbCrLf & _ "컴퓨터: " & wbemObject.ComputerName & vbCrLf & _ "메시지: " & wbemObject.Message & vbCrLf Next

목록 1, 2, 3을 자세히 살펴보면 세 가지 스크립트에 대한 두 가지 중요한 사실을 알 수 있습니다. 첫째는 세 스크립트 모두 동일한 세 가지 단계를 실행한다는 점입니다. 즉, 스크립트가 WMI에 연결되고 WMI 관리 리소스를 검색하고 몇 가지 리소스 속성을 반향합니다. 둘째는 각 스크립트에서 변경된 몇 가지 사항이 대상 리소스를 식별하는 클래스 이름(즉, 각각Win32_LogicalMemoryConfiguration,Win32_ServiceWin32_NTLogEvent)과 리소스의 해당 속성이라는 점입니다.

스크립트에 사용된 세 단계는 WMI 관리 리소스에 대한 정보를 검색하는 데 사용된 WMI 스크립트에 공통적입니다. 각 단계를 자세히 살펴보겠습니다.

딘계 1: WMI 서비스에 연결

WMI 스크립트의 첫 번째 단계는 대상 컴퓨터의 Windows 관리 서비스에 연결을 설정하는 것입니다. 로컬 또는 원격 컴퓨터의 WMI에 연결하려면 VBScript의Getobject함수를 호출하고GetObject에 "winmgmts:" 다음에 대상 컴퓨터 이름이 오는 WMI 스크립팅 라이브러리의 모니커 이름을 전달하면 됩니다.

이러한 방식으로 WMI에 연결하면 목록 1, 2, 3의 wbemServices 변수를 사용하여 참조하는SWbemServices개체에 대한 참조를 반환합니다.SWbemServices는 WMI 스크립팅 라이브러리에 정의된 수많은 개체 중 하나입니다. WMI 스크립팅 라이브러리는 WMI 인프라에 액세스하는 데 사용되는 일반적인 용도의 개체 스크립트 집합을 제공합니다.SWbemServices개체에 대한 참조가 있으면 제공된SWbemServices메서드 중 하나를 호출할 수 있습니다.InstancesOf가 그러한 메서드 중 하나입니다.

단계 2: WMI 관리 리소스의 인스턴스 검색

두 번째 단계는 주로 실행할 작업에 따라 다릅니다. WMI 관리 리소스에 대한 정보를 검색하는 경우 이 단계는SWbemServices개체의InstancesOf메서드를 호출하는 것만큼 간단합니다. 메서드 이름이 나타내듯이InstancesOf는 리소스의 클래스 이름으로 식별되는 관리 리소스의 모든 인스턴스를 반환합니다.InstancesOf는 wbemObjectSet 변수를 사용하여 목록 1, 2, 3에서 참조하는SWbemObjectSet컬렉션 형식으로 요청한 리소스를 반환합니다.SWbemObjectSet은 WMI 스크립팅 라이브러리에 정의된 또 다른 스크립팅 개체입니다.

단계 3: WMI 관리 리소스 속성 표시

마지막이자 최종 단계는SWbemObjectSet컬렉션의 컨텐트를 열거하는 것입니다.SWbemObjectSet의 각 항목은 요청한 리소스의 단일 인스턴스를 나타내는SWbemObject(WMI 스크립팅 라이브러리의 다른 개체)입니다.SWbemObject를 사용하여 관리 리소스의 클래스 정의에 정의된 메서드와 속성에 액세스할 수 있습니다.

그렇다면, WMI에서 정보를 검색하는 스크립팅 단계가 동일할 경우Win32_LogicalMemoryConfiguration,Win32_ServiceWin32_NTLogEvent클래스는 어떻습니까? 또한, 이러한 클래스는 어디에서 온 것이고, 사용 가능한 다른 클래스는 어떤 것이 있으며, 그러한 클래스는 어떻게 사용합니까? 이러한 질문에 대한 대답은 WMI 아키텍처를 구성하는 구성 요소에 있습니다. 한 번 살펴봅시다.

WMI 아키텍처

WMI 아키텍처는 그림 3에 나타난 대로 세 가지 주요 계층으로 구성됩니다.

  • 관리 리소스
  • WMI 인프라
  • 소비자

사용자 삽입 이미지

그림 3. WMI 인프라

리소스가 상주한 가장 낮은 계층에서 시작하겠습니다.

관리 리소스

관리 리소스는 WMI를 사용하여 게시되고 관리할 수 있는 논리적 또는 물리적 구성 요소입니다. WMI를 사용하여 관리할 수 있는 Windows 리소스에는 컴퓨터 시스템, 디스크, 주변 장치, 이벤트 로그, 파일, 폴더, 파일 시스템, 네트워킹 구성 요소, 운영 체제 하위 시스템, 성능 카운터, 프린터, 프로세스, 레지스트리 설정, 보안, 서비스, 공유, SAM 사용자 및 그룹, Active Directory, Windows Installer, WDM(Windows Driver Model) 장치 드라이버 및 SNMP MIB(Management Information Base) 데이터가 있습니다. WMI 관리 리소스는 공급자를 통해 WMI와 통신합니다. WMI 관리 리소스와 상호 작용할 스크립트를 작성할 때 실행 스크립트의 관리 리소스에 대한 가상 표현을 참조하는 데 사용되는 "인스턴스"라는 용어가 자주 나타납니다.

WMI 인프라

중간 계층은 WMI 인프라입니다. WMI는 CIM 개체 관리자(Common Information Model Object Manager), CIM(Common Information Model) 리포지토리 및 공급자의 세 가지 주요 구성 요소로 구성됩니다. 세 가지 WMI 구성 요소는 구성 및 관리 데이터를 정의하고 게시하고 액세스하고 검색하는 인프라를 제공합니다. 작지만 스크립팅에 절대적으로 필요한 네 번째 구성 요소는 WMI 스크립팅 라이브러리입니다.

WMI 공급자

WMI 공급자는 WMI와 관리 리소스 간의 중개자 역할을 합니다. 공급자는 소비자 응용 프로그램 및 스크립트 대신 WMI 관리 리소스에서 정보를 요청하고 WMI 관리 리소스에 설명을 보냅니다. 예를 들어, 목록 1과 2는 기본 제공 Win32 공급자를 사용하여 메모리와 서비스 관련 정보를 검색합니다. 목록 3은 기본 제공 이벤트 로그 공급자를 사용하여 Windows 이벤트 로그에서 레코드를 검색합니다.

공급자는 WMI의 표준 기반 단일 액세스 모델을 기준으로 한 WMI 인프라에 관리 리소스를 제공하여 관리 리소스에 고유한 구현 세부 정보를 숨깁니다. WMI 공급자는 관리 리소스 기본 API를 사용하여 각 관리 리소스와 통신하고 WMI 프로그래밍 인터페이스를 사용하여 CIMOM과 통신합니다. 예를 들면, 기본 제공 이벤트 로그 공급자는 Win32 이벤트 로그 API를 호출하여 이벤트 로그에 액세스합니다.

소프트웨어 개발자는 추가 공급자를 개발하고 통합하여 WMI의 확장 가능한 아키텍처를 기준으로 해당 제품에 고유한 관리 기능을 게시할 수 있습니다. Exchange 커넥터 상태를 모니터링하는 Exchange Server 2000 공급자가 그러한 예입니다. 마찬가지로, Application Center, Operations Manager, Systems Management Server, Internet Information Server 및 SQL Server에 모두 WMI 공급자가 포함되어 있습니다.

일반적으로 공급자는 %SystemRoot%\system32\wbem 디렉터리에 있는 DLL(동적 연결 라이브러리)로 구현됩니다. WMI에는 Windows 2000, Windows XP 및 Windows Server 2003 운영 체제 제품군을 위한 여러 가지 기본 제공 공급자가 포함되어 있습니다. 기본 제공 공급자는 표준 공급자라고도 하며, Win32 하위 시스템, 이벤트 로그, 성능 카운터 및 레지스트리와 같은 잘 알려진 운영 체제 리소스의 데이터 및 관리 기능을 제공합니다. 표 1은 Windows 2000, Windows XP 및 Windows .NET Server 운영 체제 제품군에 포함된 여러 가지 표준 WMI 공급자를 나열합니다.

표 1. 표준 WMI 공급자의 일부 목록

공급자DLL네임스페이스설명
Active Directory 공급자dsprov.dllroot\directory\ldapActive Directory 개체를 WMI에 매핑합니다.
이벤트 로그 공급자ntevt.dllroot\cimv2Windows 이벤트 로그를 관리합니다. 예를 들면, 이벤트 로그 설정 읽기, 백업, 지우기, 복사, 삭제, 모니터링, 이름 바꾸기, 압축, 압축 풀기 및 변경 작업을 수행합니다.
성능 카운터 공급자wbemperf.dllroot\cimv2원시 성능 데이터에 대한 액세스를 제공합니다.
레지스트리 공급자stdprov.dllroot\default레지스트리 키와 값을 읽고, 쓰고, 나열하고, 모니터링하고, 만들고 삭제합니다.
SNMP 공급자snmpincl.dllroot\snmpSNMP MIB 데이터에 대한 액세스를 제공하고 SNMP 관리 장치에서 트랩합니다.
WDM 공급자wmiprov.dllroot\wmiWDM 장치 드라이버의 정보에 대한 액세스를 제공합니다.
Win32 공급자cimwin32.dllroot\cimv2컴퓨터, 디스크, 주변 장치, 파일, 폴더, 파일 시스템, 네트워킹 구성 요소, 운영 체제, 프린터, 프로세스, 보안, 서비스, 공유, SAM 사용자 및 그룹 등에 대한 정보를 제공합니다.
Windows Installer 공급자msiprov.dllroot\cimv2설치된 소프트웨어 정보에 대한 액세스를 제공합니다.

Windows XP 및 Windows Server 2003에는 여러 가지 추가 표준 공급자가 포함되어 있습니다. 표준 공급자의 전체 목록에 대해서는 WMI SDK(Software Developers Kit) 설명서의WMI Provider

사용자 삽입 이미지
를 참조하십시오.

CIMOM

CIMOM(see-mom으로 발음함)은 소비자와 공급자 간의 상호 작용을 처리합니다. 이 용어는 웹 기반 엔터프라이즈 관리 초기 작업과Distributed Management Task Force

사용자 삽입 이미지
에서 유지 관리되는 CIM(Common Information Model)에서 가져온 것입니다.

CIMOM을 WMI 정보 중개자로 생각할 수 있습니다. 모든 WMI 요청 및 데이터는 CIMOM으로 전달됩니다. WMI(Windows Management Instrumentation) 서비스 winmgmt.exe는 Windows XP 및 Windows Server 2003 운영 체제 제품군에 CIMOM 역할을 제공하며, 일반 서비스 호스트 프로세스인 svchost.exe 제어를 통해 실행됩니다.

참고   Windows 2000 또는 Windows NT 4.0 서비스 팩 4를 실행하는 컴퓨터에서 WMI 서비스는 별도의 서비스 프로세스로 실행됩니다. Windows ME(Millennium Edition), Windows 98 또는 Windows 95 OSR 2.5를 실행하는 컴퓨터에서 WMI는 표준 실행 프로세스로 실행됩니다.

소비자가 WMI에 액세스하여 일반 인터페이스를 제공하는 것 외에 CIMOM은 다음과 같은 핵심 서비스를 WMI 인프라에 제공합니다.

  • 공급자 등록WMI 공급자는 CIMOM을 사용하여 위치 및 기능 정보를 등록합니다. 이 정보는 CIM 리포지토리에 저장됩니다.
  • 요청 라우팅CIMOM은 공급자 등록 정보를 사용하여 소비자 요청을 해당 공급자에게 라우팅합니다.
  • 원격 액세스소비자는 원격 시스템의 CIMOM에 연결하여 원격 WMI 사용 가능 시스템에 액세스합니다. 연결이 설정되면 소비자는 로컬로 실행할 수 있는 동일한 작업을 실행할 수 있습니다.
  • 보안CIMOM은 로컬 컴퓨터나 원격 컴퓨터에서 사용자의 WMI 연결을 허용하기 전에 각 사용자의 액세스 토큰을 확인하여 WMI 관리 리소스에 대한 액세스를 제어합니다. WMI는 운영 제체에서 제공하는 보안을 무시하거나 방해하지 않습니다.
  • 쿼리 처리소비자가 WQL(WMI Query Language)을 사용하여 WMI 관리 리소스에 대한 쿼리를 제공할 수 있게 합니다. 예를 들면, 지난 24시간 동안 발생한 특정 이벤트 ID에 일치하는 모든 이벤트에 대해 이벤트 로그를 쿼리할 수 있습니다. CIMOM은 공급자가 기본적으로 쿼리 작업을 지원하지 않는 경우 쿼리에 대한 평가를 실행할 수 있습니다.
  • 이벤트 처리소비자가 WMI 관리 리소스에 대한 변경 사항을 나타내는 이벤트에 가입할 수 있도록 합니다. 예를 들면, 논리 디스크 드라이브의 공간이 허용 가능한 임계값 이하로 떨어지는 시기를 나타내는 이벤트에 가입할 수 있습니다. CIMOM은 사용자가 지정한 간격으로 관리 리소스를 폴링하고 가입이 만족스러우면 이벤트 알림을 생성합니다.

관리 응용 프로그램, 관리 도구 및 스크립트는 CIMOM으로 호출되어 데이터를 마이닝하고 이벤트에 가입하거나 기타 관리 관련 작업을 실행합니다. CIMOM은 CIM에서 소비자의 요청을 서비스하는 데 필요한 공급자와 클래스 정보를 얻습니다. CIMOM은 CIM에서 얻은 정보를 사용하여 소비자의 요청을 해당 공급자에게 전달합니다.

CIM 리포지토리

WMI는 다른 소스의 구성 및 관리 정보를 고유하게 스키마로 나타낼 수 있다는 개념을 기반으로 합니다. CIM은 스키마이며, 관리 환경을 모델링하고 WMI에서 제공한 모든 데이터를 정의한 개체 리포지토리 또는 클래스 저장소라고도 합니다. 스키마는DMTF CIM(Common Information Model) Standards

사용자 삽입 이미지
를 기반으로 합니다.

Active Directory 스키마가 클래스라는 개념 위에 구축된 것처럼 CIM은클래스로 구성됩니다. 클래스는 WMI 관리 가능 리소스에 대한 청사진입니다. 그러나 디렉터리에 만들어지고 저장된 개체를 나타내는 Active Directory 클래스와 달리, CIM 클래스는 일반적으로 동적 리소스를 나타냅니다. 즉, 리소스 인스턴스가 CIM에 저장되지 않지만 소비자 요청을 기반으로 하여 공급자가 동적으로 리소스 인스턴스를 검색합니다. 그 이유는 간단합니다. 대부분의 WMI 관리 리소스의 운영 상태는 자주 바뀌므로 읽기 요청 시 최신 정보가 검색되도록 합니다.

참고   리포지토리라는 용어는 CIM 컨텍스트에서 오해를 일으킬 수도 있습니다. CIM은 리포지토리이고 정적 데이터를 저장할 수 있지만 주 역할은 관리 리소스에 대한 청사진을 저장하는 것입니다.

Active Directory 클래스와 마찬가지로 CIM 클래스도 하위 클래스가 상위 클래스에서 상속되는 계층 구조로 구성됩니다. DMTF는 Microsoft의 시스템 및 응용 프로그램 소프트웨어 개발자가 시스템 또는 응용 프로그램 특정 확장 클래스를 파생시키고 만드는 것처럼 그러한 개발자로부터 핵심 및 일반 기준 클래스 집합을 유지 관리합니다.

클래스는 특정 관리 영역을 나타내는 논리적 클래스 그룹인 "네임스페이스"에 그룹화됩니다. 예를 들면,root\cimv2네임스페이스에 일반적으로 컴퓨터 및 운영 체제와 관련된 리소스를 나타내는 대부분의 클래스가 들어 있습니다. 이전 스크립트에 사용된 클래스(Win32_LogicalMemoryConfiguration,Win32_ServiceWin32_NTLogEvent)는root\cimv2네임스페이스에 있으며 CIM에 300개의 클래스가 정의되어 있습니다.

CIM 클래스는 속성과 메서드로 구성되어 있습니다. 속성은 WMI 관리 리소스의 구성 및 상태를 설명하고, 메서드는 WMI 관리 리소스에 작업을 실행하는 실행 함수입니다.

참고   CIM 클래스에 정의된 메서드 및 속성과 WMI 스크립팅 라이브러리의 자동화 개체에서 제공하는 메서드 및 속성을 혼동하지 마십시오.

CIM은 %SystemRoot%\system32\wbem\Repository\FS\ 디렉터리에 상주하며 다음 네 개의 파일로 구성되어 있습니다.

  • index.btr. 이진 트리(b 트리) 인덱스 파일입니다.
  • index.map. 트랜잭션 제어 파일입니다.
  • objects.data. 관리 리소스 정의가 저장된 CIM 리포지토리입니다.
  • objects.map. 트랜잭션 제어 파일입니다.
참고   Microsoft Windows 2000 및 Windows NT 4.0 서비스 팩 4에서 CIM은 %SystemRoot%\system32\wbem\Respository\cim.rep에 저장됩니다. Windows ME(Millennium Edition), Windows 98 및 Windows 95 OSR 2.5 운영 체제에서 CIM은 %windir%\system\wbem\Respository\cim.reprep에 저장됩니다.

CIM은 개체 지향 디자인 원칙을 기반으로 하지만 WMI 사용 및 WMI 기반 스크립트 작성을 위해 정보 모델링 또는 스키마 디자인 전문가가 될 필요는 없습니다. 중요한 것은 CIM의 기본 구조와 구성 및 해당 컨텐트 탐색 및 해석 방법을 이해하는 것입니다.

WMI 스크립팅 라이브러리

WMI 스크립팅 라이브러리는 VBScript, Jscript 및 ActiveState의 ActivePerl과 같은 스크립팅 언어에서 WMI 인프라에 액세스하여 자동화 개체 집합을 제공합니다.

WMI 스크립팅 라이브러리의 자동화 개체는 WMI 인프라에 일관된 스크립팅 모델을 제공합니다. 앞에서 설명한 대로, WMI 스크립팅 라이브러리를 사용하여 한 가지 관리 리소스 종류를 검색하는 방법을 이해하면 다른 WMI 관리 리소스를 검색하는 단계를 쉽게 사용할 수 있습니다. 예를 들면, 앞에서 설명한 세 가지 스크립트 중 하나를 사용하여 원격 컴퓨터에서 실행하는 프로세스(Win32_Process)에 대한 정보, 프로세서(Win32_Processor) 정보, 운영 체제(Win32_OperatingSystem) 정보 또는 WMI에서 제공한 수백 가지 관리 리소스 중 하나를 검색하는 스크립트를 쉽게 수정할 수 있습니다.

WMI 스크립팅 라이브러리는 %SystemRoot%\system32\wbem 디렉터리에 있는 wbemdisp.dll이라고 하는 단일 DLL로 구현됩니다. WMI 스크립팅 라이브러리에는 또한 wbemdisp.tlb라고 하는 형식 라이브러리가 있습니다. WMI 스크립팅 형식 라이브러리를 사용하여 .wsf 확장명을 가진 WSH 스크립트인 XML 기반 Windows 스크립트 파일에서 WMI 상수를 참조할 수 있습니다.

WMI 소비자

소비자는 최상위 계층입니다. 소비자는 WMI 인프라를 통해 사용할 수 있는 관리 정보에 액세스하고 제어하는 스크립트, 엔터프라이즈 관리 응용 프로그램, 웹 기반 응용 프로그램 또는 기타 관리 도구입니다.

참고   여러 관리 응용 프로그램은 WMI 소비자와 WMI 공급자의 이중 역할을 수행합니다. Application Center, Operations Manager 및 Systems Management Server와 같은 여러 가지 Microsoft 관리 제품이 이에 해당합니다.

CIM 탐색

수많은 자료를 다루어 왔지만 아직까지 언급되지 않은 한 가지 주요 사항이 있습니다. 그것은 WMI를 통해 제공할 리소스를 결정하는 방법입니다. 다행히 여러 가지 도구를 사용하여 CIM 스키마를 찾아보고 WMI 관리 리소스에 대한 클래스 정의를 검사할 수 있습니다.

  • WMI 컨트롤WMI 컨트롤(wmimgmt.msc)은 로컬 또는 원격 컴퓨터에서 WMI 설정을 구성할 수 있게 해주는 MMC(Microsoft Management Console) 스냅인입니다. WMI 컨트롤을 사용하여 CIM을 찾을 수 없지만 이 도구의 보안 탭을 사용하여 CIM 네임스페이스를 로컬 또는 원격 컴퓨터에서 사용할 수 있는지 여부를 결정할 수 있습니다. WMI 컨트롤 사용에 대한 자세한 내용은 Windows 2000 도움말 또는 Windows XP 도움말의 WMI 컨트롤 개요 및 지원 센터를 참조하십시오.
  • WMI 테스터WMI 테스터(wbemtest.exe)는 WMI 인프라와 상호 작용을 하기 위한 일반적인 용도의 그래픽 도구입니다. WMI 테스터를 사용하여 CIM 스키마를 찾고 관리 리소스 클래스 정의를 검사할 수 있습니다. 또한 WMI 테스터를 사용하여 관리 리소스 인스턴스 검색 및 쿼리 실행과 같이 WMI 기반 스크립트가 실행하는 동일한 작업을 실행할 수 있습니다. WMI 테스터는 WMI를 사용하는 모든 컴퓨터에 기본으로 설치되는 WMI의 일부이므로 wbemtest.exe는 뛰어난 WMI 학습 및 문제 해결 도구입니다. WMI 테스터 사용에 대한 자세한 내용은 Windows XP 도움말의 WMI 테스터 개요 및 지원 센터를 참조하십시오.
  • WMI 명령줄Windows XP의 일부로 릴리스된 WMI 명령줄 도구(wmic.exe)는 WMI 인프라에 명령줄 인터페이스를 제공합니다. wmic.exe를 사용하여 명령줄에서 CIM 찾아보기 및 CIM 클래스 정의 검사와 같은 일반 WMI 작업을 실행할 수 있습니다. WMI 명령줄 도구 사용에 대한 자세한 내용은 Windows XP 도움말의 WMIC(WMI 명령줄) 도구 사용 및 지원 센터를 참조하십시오.
  • CIM 스튜디오CIM 스튜디오는 WMI SDK의 일부로, WMI 인프라와 상호 작용할 웹 기반 인터페이스를 제공합니다. WMI 테스터처럼 CIM 스튜디오를 사용하여 CIM 스키마를 찾아보고 클래스 정의를 보며 관리 리소스의 인턴스를 검색할 수 있습니다. CIM 스튜디오의 고급 사용자 인터페이스를 통해 클래스 관계 및 연결을 쉽게 볼 수 있고 CIM 스튜디오는 WMI 테스터 도구에서 사용할 수 없는 두 가지 기능인 기본 검색 기능을 제공합니다. CIM 스튜디오를 사용하려면 WMI SDK를 다운로드하여 설치해야 합니다.WMI(Windows Management Instrumentation) SDK
    사용자 삽입 이미지
    에서 WMI SDK를 다운로드할 수 있습니다.
  • EnumClasses.vbs, EnumInstances.vbs 및 EnumNamespaces.vbsWindows 2000 Server Resource Kit에는 WMI의 기능을 사용하는 수많은 스크립트가 포함되어 있습니다. 여기에 나열된 세 가지 스크립트는 CIM 스키마를 찾고 클래스 정의를 보고 관리 리소스의 인스턴스를 검색하는 데 사용할 수 있는 일반적인 용도의 스크립트입니다.

다음과 같은 몇 가지 추가 리소스를 확인해야 합니다.

  • WMI SDK 설명서WMI SDK에는 표준 WMI 공급자가 제공한 포괄적인 클래스 목록이 들어 있습니다. MSDN 온라인 라이브러리에서WMI SDK documentation
    사용자 삽입 이미지
    에 액세스할 수 있습니다.
  • TechNet Script CenterTechNet Script Center
    사용자 삽입 이미지
    에는 다음 System Administration Scripting Guide의 수백 가지 WMI 기반 샘플 스크립트가 들어 있습니다.

WMI 테스터(wbemtest.exe) 연습

CIM 찾아보기 및 탐색에 사용할 수 있는 도구에 대해 알고 있으므로 WMI 테스터(wbemtest.exe)를 사용하여Win32_Process클래스 정의를 검사하고 목록 2를 수정하여 현재 컴퓨터에서 실행하는 프로세스에서 여러 가지 속성을 검색해 보겠습니다. 최상의 결과를 얻으려면 이 연습에 들어가기 전에 관리자 권한으로 로그온하십시오.

  1. 명령 프롬프트를 열고C:\>wbemtest.exe를 입력한 다음Enter키를 눌러 WMI 테스터 도구를 시작합니다. 기본 WMI 테스터 창에서 대부분의 단추가 비활성화되어 있는지 확인하십시오. 단추가 비활성화되어 있으면 현재 WMI에 연결되어 있는 것이 아닙니다.
  2. 연결을 클릭하여 로컬 또는 원격 컴퓨터의 WMI 서비스에 연결합니다.root\default가 기본값으로 제공된네임스페이스텍스트 항목 필드를 제공하는 연결 대화 상자가 표시됩니다.네임스페이스필드 값을root\cimv2로 변경하고 연결 대화 상자의연결단추를 클릭하여 기본 WMI 테스터 창으로 돌아갑니다.
  3. 기본 창의 왼쪽 상단에 있는 네임스페이스 식별자는 root\cimv2로 표시됩니다. 이제 모든 단추가 활성화되어 있습니다. 즉, 현재 자격 증명으로 로컬 호스트에서 WMI에 성공적으로 연결된 것입니다.클래스 열거를 클릭하여 슈퍼클래스 정보 대화 상자를 엽니다.
  4. 슈퍼클래스 정보 대화 상자에서슈퍼클래스 이름 입력필드는 비워두고모든 클래스옵션을 클릭한 다음확인을 클릭하여 root\cimv2 네임스페이스에 정의된 모든 CIM 클래스를 열거합니다.

    현재, 수백 개의 클래스 정의를 나열한 쿼리 결과 대화 상자가 표시됩니다. 클래스 수는 주로 현재 실행 중인 Windows 버전에 따라 다릅니다. 예를 들어, Windows 2000을 사용 중이면 600개의 클래스 정의가 나타납니다. Windows XP를 실행 중이면 대략 900개가 나타납니다.

    쿼리 결과 대화 상자 위쪽에 나열된 클래스는 앞에 두 개의 밑줄이 표시됩니다. 이러한 클래스는 시스템 클래스입니다. 시스템 클래스는 공급자 등록, 네임스페이스 보안 및 이벤트 알림과 같은 내부 WMI 구성 및 작업을 지원하는 미리 정의된 CIM 클래스입니다. 현재는 CIM_으로 시작하는 클래스가 나타날 때까지 시스템 클래스를 무시하고 쿼리 결과 대화 상자 아래로 스크롤합니다.

    CIM_으로 시작하는 클래스는 DMTF에서 유지 관리하는 핵심 및 공통적인 기본 클래스입니다. Win32_로 시작하는 클래스가 나타날 때까지 아래로 스크롤합니다.

    Win32_로 시작하는 클래스는 Windows 특정 관리 리소스를 나타내는 Microsoft 확장 클래스입니다.root\cimv2네임스페이스를 처음 검사하는 경우root\cimv2네임스페이스에서 포괄적인 클래스 집합, 특히 Win32_prefix가 있는 클래스 집합에 대해 잘 알고 싶을 것입니다.

  5. Win32_Process클래스가 나타날 때까지 쿼리 결과 대화 상자를 아래로 스크롤하고 클래스 이름을 두 번 클릭하여 Win32_Process에 대한 개체 편집기 대화 상자를 엽니다.
  6. 개체 편집기 대화 상자에 선택한 클래스에 대한 정의 및 구현 정보(속성 및 메서드)가 나타납니다. 클래스 정의는 WMI 관리 가능 리소스의 청사진이라고 앞에서 설명한 내용을 상기하십시오.

    시스템 속성 숨기기확인란을 선택하여 시스템 속성을 숨깁니다. 나머지 Win32_Process 속성은 로컬 또는 원격 컴퓨터에서 실행하는 프로세스에서 검색할 수 있는 정보를 나타냅니다.

    WMI 스크립팅 연습을 완료하려면Name,HandleProcessID속성을 검색해 보십시오. 앞에서 템플릿으로 나열된 세 개 목록 중 하나를 사용하여 단계 7을 실행하기 전에 스크립트를 실행해 보십시오.

    참고   로컬 컴퓨터에서 스크립트를 실행하려면 strComputer 변수 값을 "."(인용 부호 내의 한 점)로 설정합니다.
  7. 새로 만든 GetProcesses.vbs 스크립트를 실행한 후에 WMI 테스터를 사용하여 스크립트 결과를 확인할 수 있습니다. Win32_Process 개체 편집기 대화 상자에서인스턴스를 두 번 클릭합니다. 쿼리 결과 대화 상자의 결과는 사용하는 컴퓨터에서 실행 중인 프로세스의 인스턴스를 나열한 것입니다. 특정 프로세스 인스턴스를 두 번 클릭하여 해당 인스턴스에 대한 세부 정보를 확인합니다.

결론

WMI 스크립팅의 외관만 살펴 보았습니다. 솔직히 말하자면 이것은 의도적인 것이었습니다. WMI는 트리의 포리스트를 놓치기 쉬운 여러 가지 스크립팅 기능을 제공합니다. 그렇지만 걱정하지 마십시오. 이 시리즈를 진행하면서 모든 차이를 알게 되었습니다. 이 시점에서 중요한 것은 WMI는 Windows의 가장 중요한 관리 가능한 단일 기술이며 WMI 기반 스크립트를 작성하는 데 개발자나 스크립팅 전문가일 필요는 없다는 점입니다. 새로 만든 스크립트를 계속 수정하여 추가 프로세스 속성이나 다른 관리 리소스를 검색하십시오. 다음 달에 만날 때 여러분은 사용자에 맞게 설정된 시스템 관리 스크립트에 대한 전문가가 되어 있을 것입니다. 비결을 알려주십시오.

목록 4. WMI 테스터 연습에 대한 응답

strComputer = "." ' 점(.)은 WMI에서 로컬 컴퓨터와 같습니다. Set wbemServices = GetObject("winmgmts:\\" & strComputer) Set wbemObjectSet = wbemServices.InstancesOf("Win32_Process") For Each wbemObject In wbemObjectSet WScript.Echo "이름: " & wbemObject.Name & vbCrLf & _ " 핸들: " & wbemObject.Handle & vbCrLf & _ " 프로세스 ID: " & wbemObject.ProcessID Next

 


스크립팅 클리닉

Greg Stemp는 오랫동안 전국 최고의 스크립팅 대가 중 한 사람으로, 또한 세계적인 풋볼 코치로 널리 인정받아 왔습니다. 그런데 어떻게 풋볼 코치가 이런 일을 하게 되었냐구요? 그는 "해고"되었습니다. Greg Stemp는 ... 이제 그렇게 말할 수 조차 없군요. 좋습니다. Greg Stemp는 Microsoft에서 "System Administration Scripting Guide"의 수석 집필진입니다.

Bob Wells는 관심을 갖고 있는 사람이면 누구에게나 스크립팅의 가치를 역설합니다. Bob이 키우는 두 마리 닥스훈트도 보통 사람보다 스크립팅에 대해 더 많이 알고 있다는 소문이 있습니다. 여가 시간에 Bob은 System Administration Scripting Guide에 기고합니다.

Ethan Wilansky는 많은 시간을 저술 및 컨설팅 활동에 보냅니다. 그리고 스크립팅, 요가, 원예 및 가정일에 열심입니다. 현재는 쓰레기를 버리고 설겆이를 하는 스크립트를 만드는 일에 전념하고 있습니다.



최종 수정일: 2002년 10월 7일