본문 바로가기
Programming/C#

Windows Management Instrumentation (WMI)

by miumida 2010. 4. 1.
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를 관리할 스크립트를 작성할 수 있습니다.

원문 :
MSDN - WMI 스크립팅 입문: 1부

MSDN에서 WMI를 위와 같이 정의하고 있다.
WMI를 이용해서 정보를 얻기위해서는 SQL Query와 비슷한 형태의 WQL (WMI Query Language)를 이용하여야 한다.

WQL를 통해 사용할 수 있는 정보는 Win32 Classes을 통하여 원하는 정보를 얻을 수 있다.

위의 링크를 통해서 Win32 Classes에서 자신이 필요한 정보를 찾도록 하자.
Win32 Classes에 대해서 알지 못해서 블로그에 포스팅된 글들만 보고 단순 있는 것만 가져다 쓸 수 밖에 없는 것이 모를 때의 일이였지만, 앞으로 필요한 정보가 있을 때에 괜한 블로그에 포스팅된 글을 찾아서 볼려고 하지말고 이용하도록 하자.

사실 봐도 잘 모르지만, 노력하지 않고서 무작정 얻을려고 하면 자기 자신에게도 전혀 도움이 되지 않으니 맨땅에 헤딩한다고 생각하고 노력을 해보자.

C#에서 사용하기 위해서는 '참조추가 > .NET > System.Management'를 통해 참조추가를 해준 뒤에 사용하도록 하자. 괜히 참조추가를 하지 않은 상태에서 'using System.Management'만 추가한 상태에서 되지 않는 횡포는 부리지 말기바란다.

using System.Management;

WQL에 사용에 대해서는 자세히 서술하지 않을 생각이다. 아니 자세히 알지 못해서 서술하지 못한다고 해야될 것이다. 간단하게 한 예로써 'Win32_Processor'에 대한 부분을 적어보았다. 상황에 따라 알맞게 쓸 수 있길 바란다.

ManagementObjectSearcher query =
new ManagementObjectSearcher("SELECT * FROM Win32_processor");
ManagementObjectCollection queryCollection1 = query.Get();

foreach (ManagementObject mo in queryCollection1)
{
Console.WriteLine(mo["Caption"].toString());
}

Win32 Classes를 이용해서 자신이 필요로 하는 부분을 잘 찾아 쓸수 있기 바란다. 괜히 없는 걸 찾으면서 안나온다는 횡포는 받아주지 않는다. 그리고 출력 또한 Console이 아닌 ListView나 ListBox 등 여러가지로 활용할 수 있으니 용도에 맞게 쓰도록 하자.


위의 링크는 WMI에 대한 MSDN 영문사이트이다.

댓글