about_WMI
about_WMI
WMI(Windows Management Instrumentation)는 시스템, 애플리케이션, 네트워크, 디바이스 같은 관리 대상 구성 요소를 CIM(Common Information Model)이라는 표준 모델로 표현해 주는 기술이에요. 이 문서에서는 WMI가 PowerShell과 어떻게 맞물리는지, 그리고 그 핵심 구성 요소인 네임스페이스·프로바이더·클래스를 어떻게 다루는지 함께 살펴볼게요.
출처: Microsoft Learn — about_WMI (PowerShell-Docs, last updated 2026-01-07)
본문
Short description (짧은 설명)
WMI는 CIM을 이용해 시스템, 애플리케이션, 네트워크, 디바이스, 그리고 현대 엔터프라이즈의 기타 관리 가능한 구성 요소들을 표현해 주는 기술이에요.
Long description (긴 설명)
WMI는 마이크로소프트가 업계 표준인 WBEM(Web-Based Enterprise Management)을 구현한 거예요. 한마디로 "관리 데이터를 다루는 데 쓰는 마이크로소프트의 공식 구현"이라고 보면 돼요.
고전적인 WMI는 원격 시스템을 관리할 때 DCOM을 통해 네트워크 장비와 통신했어요. 그런데 Windows PowerShell 3.0부터는 WinRM을 사용하는 CIM 프로바이더 모델이 도입되면서 DCOM에 대한 의존성이 사라졌죠. 이 CIM 프로바이더 모델은 새로운 WMI 프로바이더 API를 함께 사용하기 때문에, 개발자가 네이티브 코드(C++)로 Windows PowerShell cmdlet을 직접 작성할 수도 있어요.
여기서 주의할 점이 하나 있어요. WMI 프로바이더와 Windows PowerShell 프로바이더를 헷갈리면 안 돼요. Windows의 많은 기능에는 각자의 관리 기능을 드러내 주는 WMI 프로바이더가 딸려 있는데, WMI 프로바이더 목록을 보려면 __Provider WMI 클래스의 인스턴스를 가져오는 WMI 쿼리를 실행하면 돼요. 예를 들어 다음과 같이요.
Get-WmiObject -Class __Provider
WMI의 세 가지 구성 요소
WMI에는 Windows PowerShell과 상호작용하는 구성 요소가 세 가지 있어요. 바로 네임스페이스(Namespaces), 프로바이더(Providers), 클래스(Classes) 죠.
WMI 네임스페이스는 WMI 프로바이더와 WMI 클래스를 서로 관련된 구성 요소끼리 묶어 주는 역할을 해요. 이런 점에서 .NET Framework 네임스페이스와 비슷하죠. 네임스페이스는 물리적 위치가 아니라 논리적 데이터베이스에 가까워요. 모든 WMI 네임스페이스는 __Namespace 시스템 클래스의 인스턴스예요. 기본 WMI 네임스페이스는 (Microsoft Windows 2000 이후로) root/CIMV2예요. 현재 세션에서 WMI 네임스페이스 목록을 얻으려면 다음과 같은 형식의 명령을 쓰면 돼요.
Get-WmiObject -Class __Namespace
다른 네임스페이스 안의 네임스페이스를 찾으려면 Namespace 매개 변수로 검색 위치를 바꾸면 돼요. 아래 명령은 root/CIMV2/Applications 네임스페이스에 속한 WMI 네임스페이스들을 찾아줘요.
Get-WmiObject -Class __Namespace -Namespace root/CIMV2/Applications
WMI 네임스페이스는 계층 구조로 되어 있어요. 그래서 특정 시스템에 있는 모든 네임스페이스 목록을 얻으려면 루트 네임스페이스부터 시작하는 재귀적(recursive) 쿼리를 수행해야 해요.
WMI 프로바이더는 Windows의 관리 가능한 개체에 대한 정보를 드러내 주는 역할을 해요. 프로바이더가 어떤 구성 요소에서 데이터를 가져와서, 그 데이터를 WMI를 통해 PowerShell 같은 관리 애플리케이션으로 전달하는 구조죠. 대부분의 WMI 프로바이더는 동적(dynamic) 프로바이더예요. 즉 관리 애플리케이션이 요청하는 순간에 데이터를 동적으로 가져온다는 뜻이에요.
WMI 클래스 찾기
기본 Windows 8 설치 환경에는 root/CIMV2에만 1,100개가 넘는 WMI 클래스가 있어요. 이렇게 많다 보니 "특정 작업을 수행하려면 어떤 WMI 클래스를 써야 할까"가 오히려 어려워질 수밖에 없죠. Windows PowerShell 3.0은 특정 주제와 관련된 WMI 클래스를 찾는 방법을 두 가지 제공해요.
예를 들어 root/CIMV2 네임스페이스 안에서 디스크와 관련된 WMI 클래스를 찾고 싶다면, 아래와 같은 쿼리를 쓰면 돼요.
Get-WmiObject -List *Disk*
메모리와 관련된 클래스를 찾는다면 이렇게 하면 되고요.
Get-WmiObject -List *Memory*
CIM cmdlet도 WMI 클래스를 발견하는 기능을 제공해요. 이때는 Get-CimClass cmdlet을 사용하면 되는데, 아래 명령은 비디오와 관련된 WMI 클래스 목록을 보여줘요.
Get-CimClass *Video*
Tab 확장(Tab expansion)은 WMI 네임스페이스를 바꿀 때도 동작해서, 하위 WMI 네임스페이스를 아주 쉽게 찾을 수 있게 도와줘요. 아래 예시에서 Get-CimClass cmdlet이 전원(power) 설정과 관련된 WMI 클래스를 보여주고 있어요. 찾으려면 root/CIMV2 네임스페이스를 입력한 다음, 전원 네임스페이스가 나올 때까지 Tab 키를 여러 번 누르면 돼요. 명령은 이렇게 생겼어요.
Get-CimClass *Power* -Namespace root/CIMV2/power