그룹 정책(GPO)에서 WMI 필터를 사용하면 다양한 조건에 따라 정책을 더욱 유연하게 적용할 수 있습니다. WMI 필터는 WMI 쿼리 언어(WQL, WMI Query Language)로 작성된 쿼리 집합으로, 특정 그룹 정책을 적용할 대상 컴퓨터를 선별하는 데 사용됩니다. 예를 들어, OU에 연결된 정책에 WMI 필터를 적용하면 Windows 10이 실행 중인 컴퓨터에만 해당 정책을 적용하고, 다른 Windows 버전의 컴퓨터에는 적용되지 않도록 설정할 수 있습니다.
WMI GPO 필터는 어떤 용도로 사용될까?
WMI(Windows Management Instrumentation)를 이용한 그룹 정책 필터링은 일반적으로 다음과 같은 상황에서 유용합니다. 여러 도메인 개체(사용자 또는 컴퓨터)가 별도의 OU로 분리되지 않고 단일(flat) AD 구조에 위치해 있거나, OS 버전, 네트워크 설정, 설치된 소프트웨어 등 WMI로 확인 가능한 기준에 따라 그룹 정책을 적용해야 하는 경우입니다. 클라이언트가 이러한 그룹 정책을 처리할 때 Windows는 자신의 상태가 지정된 WMI 쿼리 조건과 일치하는지 확인하고, 조건이 충족되면 해당 GPO가 컴퓨터에 적용됩니다.
WMI 그룹 정책 필터는 Windows XP/Server 2003에서 처음 도입되었으며, 최신 Windows 버전(Windows Server 2019, 2016, Windows 10, 8.1)에서도 계속 지원됩니다.
새 WMI 필터 생성 후 GPO에 연결하기
새 WMI 필터를 생성하려면 그룹 정책 관리(Group Policy Management) 콘솔(gpmc.msc)을 열고 포리스트(Forest) → 도메인(Domains) → 도메인 이름 → WMI 필터(WMI Filters)로 이동합니다. 이 섹션에는 AD 도메인 내의 모든 WMI 필터가 표시됩니다. 여기서 새로 만들기(New)를 클릭해 새 필터를 생성합니다.
필터 이름과 설명(선택 사항)을 입력한 뒤, 추가(Add) 버튼을 클릭하여 WMI 쿼리 코드를 추가합니다. 이때 WMI 네임스페이스(기본값: root\CIMv2)를 지정하고 WMI 쿼리 코드를 입력하면 됩니다.
WMI 쿼리의 기본 형식은 다음과 같습니다:
Select * from <WMI Class> WHERE <Property> = <Value>
예를 들어, Windows 10이 실행 중인 컴퓨터에만 GPO를 적용하는 WMI 필터를 만들고 싶다면 쿼리는 다음과 같이 작성할 수 있습니다:
Select * from Win32_OperatingSystem where Version like "10.%" and ProductType="1"
생성된 WMI 필터는 Active Directory 도메인의 DC=…, CN=System, CN=WMIPolicy, CN=SOM 경로 아래 msWMI-Som 클래스 개체로 저장되며, adsiedit.msc를 사용해 찾아 편집할 수 있습니다.
WMI 필터를 생성한 후에는 특정 GPO에 연결할 수 있습니다. GPMC 콘솔에서 원하는 정책을 찾아 범위(Scope) 탭의 WMI 필터링(WMI Filtering) 섹션 드롭다운 목록에서 생성한 WMI 필터를 선택합니다. 예를 들어, 프린터 할당 정책을 Windows 10 컴퓨터에만 적용하도록 설정할 수 있습니다.
정책이 클라이언트에 적용될 때까지 기다리거나, gpupdate /force 명령으로 수동으로 갱신합니다. 클라이언트에서 적용된 정책을 분석할 때는 gpresult /r 명령을 사용하세요. 정책이 클라이언트에 영향을 미치지만 WMI 필터 조건 때문에 적용되지 않는 경우, gpresult 보고서에서 해당 정책의 상태가 Filtering: Denied (WMI Filter)로 표시됩니다.
GPO WMI 필터링 실전 예제
가장 많이 사용되는 WMI GPO 필터 예제들을 살펴보겠습니다.
WMI 필터를 활용하면 OS 유형을 선택할 수 있습니다:
- ProductType=1 – 모든 데스크톱 Windows 에디션
- ProductType=2 – Active Directory 도메인 컨트롤러
- ProductType=3 – Windows Server
Windows 버전별 Version 값은 다음과 같습니다:
- Windows Server 2016 및 Windows 10 — 10.%
- Windows Server 2012 R2 및 Windows 8.1 — 6.3%
- Windows Server 2012 및 Windows 8 — 6.2%
- Windows Server 2008 R2 및 Windows 7 — 6.1%
- Windows Server 2008 및 Windows Vista — 6.0%
- Windows Server 2003 — 5.2%
- Windows XP — 5.1%
- Windows 2000 — 5.0%
논리 연산자 AND와 OR를 사용해 여러 조건을 조합할 수 있습니다. Windows Server 2016 서버에만 정책을 적용하려면 WMI 쿼리를 다음과 같이 작성합니다:
select * from Win32_OperatingSystem WHERE Version LIKE "10.%" AND (ProductType = "2" or ProductType = "3")
32비트 버전의 Windows 8.1만 선택하려면:
select * from Win32_OperatingSystem WHERE Version like "6.3%" AND ProductType="1" AND OSArchitecture = "32-bit"
GPO를 64비트 OS에만 적용하려면:
Select * from Win32_Processor where AddressWidth = "64"
특정 빌드 번호를 가진 Windows 10(예: Windows 10 1803)을 선택할 수도 있습니다:
select Version from Win32_OperatingSystem WHERE Version like "10.0.17134" AND ProductType="1"
VMware 가상 머신에만 정책을 적용하려면:
SELECT Model FROM Win32_ComputerSystem WHERE Model = "VMWare Virtual Platform"
노트북에만 정책을 적용하려면(SCCM에서 노트북 찾기용 WMI 쿼리 참조):
select * from Win32_SystemEnclosure where ChassisTypes = "8" or ChassisTypes = "9" or ChassisTypes = "10" or ChassisTypes = "11" or ChassisTypes = "12" or ChassisTypes = "14" or ChassisTypes = "18" or ChassisTypes = "21"
컴퓨터 이름이 "lon-pc"로 시작하는 장치에만 적용되는 WMI 필터입니다(예: 해당 장치에서 USB 드라이브 비활성화):
SELECT Name FROM Win32_ComputerSystem WHERE Name LIKE 'lon-pc%'
IP 서브넷을 기준으로 GPO를 대상화하는 WMI 필터도 활용할 수 있습니다. 예를 들어, 여러 IP 서브넷의 클라이언트에 정책을 적용하려면 다음 WMI 쿼리를 사용합니다:
Select * FROM Win32_IP4RouteTable WHERE (Mask='255.255.255.255' AND (Destination Like '10.1.1.%' OR Destination Like '10.1.2.%'))
RAM이 1GB 이상인 장치만 선택하려면:
Select * from WIN32_ComputerSystem where TotalPhysicalMemory >= 1073741824
Internet Explorer 11 설치 여부를 확인하는 WMI 필터:
SELECT path,filename,extension,version FROM CIM_DataFile WHERE path="\\Program Files\\Internet Explorer\\" AND filename="iexplore" AND extension="exe" AND version>"11.0"
PowerShell로 GPO WMI 필터 테스트하기
WMI 쿼리를 작성할 때 컴퓨터에서 다양한 WMI 매개변수 값을 확인해야 할 때가 있습니다. 이때 Get-WMIObject cmdlet을 사용하면 됩니다. 예를 들어, Win32_OperatingSystem 클래스의 WMI 속성과 값을 출력하려면 다음 명령을 실행합니다:
Get-WMIObject Win32_OperatingSystem
SystemDirectory : C:\WINDOWS\system32
Organization :
BuildNumber : 17134
RegisteredUser : Windows User
SerialNumber : 00331-10000-00001-AA146
Version : 10.0.17134
클래스의 사용 가능한 모든 속성을 표시하려면:
Get-WMIObject Win32_OperatingSystem | Select *
PowerShell을 사용하면 특정 컴퓨터에서 WMI 필터를 직접 테스트할 수 있습니다. 복잡한 WMI 쿼리를 작성한 후 해당 컴퓨터가 쿼리 조건에 부합하는지 확인하고 싶은 경우에 유용합니다. 예를 들어, IE 11 설치 여부를 확인하는 WMI 필터를 만들었다면, 대상 컴퓨터에서 get-wmiobject cmdlet으로 다음과 같이 테스트할 수 있습니다:
get-wmiobject -query 'SELECT * FROM CIM_DataFile WHERE path="\\Program Files\\Internet Explorer\\" AND filename="iexplore" AND extension="exe" AND version LIKE "11.%"'
이 명령이 결과를 반환하면 해당 컴퓨터는 쿼리 조건을 충족하는 것이고, 아무것도 반환하지 않으면 WMI 필터 조건에 맞지 않는 것입니다.
예를 들어, IE 11이 설치된 Windows 10 컴퓨터에서 위 명령을 실행하면 다음과 같은 결과가 반환됩니다:
Compressed : False
Encrypted : False
Size :
Hidden : False
Name : c:\program files\internet explorer\iexplore.exe
Readable : True
System : False
Version : 11.0.17134.1
Writeable : True
즉, 해당 컴퓨터에 IE 11이 설치되어 있으므로 이 WMI 필터가 포함된 GPO가 이 컴퓨터에 적용됩니다.
지금까지 WMI 필터를 사용해 다양한 WMI 쿼리 조건을 충족하는 컴퓨터에만 GPO를 적용하는 방법을 살펴보았습니다. 특정 GPO가 컴퓨터에 적용되지 않는 원인을 분석할 때는 반드시 WMI 필터의 존재 여부도 함께 고려해야 합니다.