Bộ lọc WMI trong Group Policy (GPO) cho phép bạn áp dụng chính sách linh hoạt hơn cho client bằng cách sử dụng các quy tắc khác nhau. Bộ lọc WMI là một tập hợp các truy vấn WMI (ngôn ngữ truy vấn WMI / WQL được sử dụng) mà bạn có thể dùng để nhắm mục tiêu các máy tính mà một chính sách nhóm cụ thể nên được áp dụng. Ví dụ, sử dụng bộ lọc WMI GPO, bạn có thể áp dụng một chính sách được liên kết với OU chỉ cho máy tính chạy Windows 10 (chính sách với bộ lọc WMI như vậy sẽ không áp dụng cho máy tính với các phiên bản Windows khác).
Bộ lọc WMI GPO dùng để làm gì?
Thông thường, lọc group policy bằng WMI (Windows Management Instrumentation) có thể được sử dụng khi nhiều đối tượng miền (người dùng hoặc máy tính) nằm trong cấu trúc AD phẳng thay vì OU riêng biệt, hoặc nếu bạn cần áp dụng group policy theo phiên bản OS, cài đặt mạng, phần mềm đã cài đặt hoặc bất kỳ tiêu chí nào khác có thể chọn bằng WMI. Khi client xử lý một group policy như vậy, Windows sẽ kiểm tra trạng thái của nó để tuân thủ truy vấn WMI được chỉ định, và nếu điều kiện bộ lọc được đáp ứng, GPO sẽ được áp dụng cho máy tính này.
Bộ lọc WMI group policy lần đầu xuất hiện trong Windows XP/Server 2003, và có sẵn trong các phiên bản Windows mới nhất (Windows Server 2019, 2016 và Windows 10, 8.1).
Tạo bộ lọc WMI mới và liên kết nó với GPO
Để tạo bộ lọc WMI mới, mở console Group Policy Management (gpmc.msc và đi đến Forest -> Domains -> woshub.com -> WMI Filters. Phần này chứa tất cả bộ lọc WMI trong miền AD. Tạo bộ lọc WMI mới (New).

Nhập tên bộ lọc và mô tả của nó (tùy chọn). Để thêm mã truy vấn WMI vào bộ lọc, nhấp nút Add, chỉ định tên namespace WMI (mặc định, root\CIMv2) và chỉ định mã WMI.
Định dạng truy vấn WMI sau được sử dụng:
Select * from <WMI Class> WHERE <Property> = <Value>
Trong ví dụ này, tôi muốn tạo bộ lọc WMI cho phép áp dụng GPO chỉ cho máy tính chạy Windows 10. Mã truy vấn WMI có thể trông như sau:
Select * from Win32_OperatingSystem where Version like "10.%" and ProductType="1"

Các bộ lọc WMI được tạo lưu trữ trong đối tượng lớp msWMI-Som của miền Active Directory trong phần DC=…, CN=System, CN=WMIPolicy, CN=SOM, bạn có thể tìm và chỉnh sửa chúng bằng adsiedit.msc.

Sau khi bạn tạo bộ lọc WMI, bạn có thể liên kết nó với một GPO cụ thể. Tìm chính sách mong muốn trong console GPMC và trên tab Scope, trong phần WMI Filtering danh sách thả xuống, chọn bộ lọc WMI của bạn. Trong ví dụ này, tôi muốn áp dụng chính sách gán máy in chỉ cho máy tính chạy Windows 10.

Chờ chính sách này áp dụng cho client, hoặc cập nhật nó thủ công bằng lệnh gpupdate /force. Khi phân tích các chính sách được áp dụng trên client, dùng lệnh gpresult /r. Nếu chính sách ảnh hưởng đến client nhưng không áp dụng do hạn chế bộ lọc WMI, chính sách như vậy sẽ có trạng thái Filtering: Denied (WMI Filter) trong báo cáo gpresult.

Ví dụ về bộ lọc WMI GPO
Hãy xem các ví dụ về bộ lọc WMI GPO thường được sử dụng nhất.
Với sự trợ giúp của bộ lọc WMI, bạn có thể chọn loại OS:
- ProductType=1 – bất kỳ edition Windows desktop nào;
- ProductType=2 – Domain controller Active Directory;
- ProductType=3 – Windows Server.
Phiên bản Windows:
- Windows Server 2016 và Windows 10 — 10.%
- Windows Server 2012 R2 và Windows 8.1 — 6.3%
- Windows Server 2012 và Windows 8 — 6.2%
- Windows Server 2008 R2 và Windows 7 — 6.1%
- Windows Server 2008 và Windows Vista — 6.0%
- Windows Server 2003 — 5.2%
- Windows XP — 5.1%
- Windows 2000 — 5.0%
Bạn có thể kết hợp điều kiện trong truy vấn WMI bằng toán tử logic AND và OR. Để áp dụng chính sách chỉ cho máy chủ chạy Windows Server 2016, mã truy vấn WMI sẽ như sau:
select * from Win32_OperatingSystem WHERE Version LIKE "10.%" AND (ProductType = "2" or ProductType = "3" )
Để chọn phiên bản 32-bit của Windows 8.1:
select * from Win32_OperatingSystem WHERE Version like "6.3%" AND ProductType="1" AND OSArchitecture = "32-bit"
Để áp dụng GPO chỉ cho OS 64-bit:
Select * from Win32_Processor where AddressWidth = "64"
Bạn có thể chọn Windows 10 với số build cụ thể, ví dụ Windows 10 1803:
select Version from Win32_OperatingSystem WHERE Version like “10.0.17134” AND ProductType=”1″
Áp dụng chính sách chỉ cho máy ảo VMWare:
SELECT Model FROM Win32_ComputerSystem WHERE Model = “VMWare Virtual Platform”
Áp dụng chính sách chỉ cho laptop (xem bài WMI Query to Find Laptops in SCCM):
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"
Bộ lọc WMI, áp dụng chỉ cho máy tính có tên bắt đầu bằng “lon-pc“(ví dụ, để vô hiệu hóa USB drive trên các thiết bị này):
SELECT Name FROM Win32_ComputerSystem WHERE Name LIKE ‘lon-pc%’
Ví dụ khác về việc dùng bộ lọc WMI để nhắm GPO đến subnet IP được mô tả trong bài Use WMI Filter to Apply GPO to IP Subnet. Ví dụ, để áp dụng chính sách cho client trong nhiều subnet IP, dùng truy vấn WMI:
Select * FROM Win32_IP4RouteTable WHERE (Mask='255.255.255.255' AND (Destination Like 10.1.1.%' OR Destination Like '10.1.2.%'))
Để chỉ chọn thiết bị với RAM trên 1 GB:
Select * from WIN32_ComputerSystem where TotalPhysicalMemory >= 1073741824
Bộ lọc WMI để kiểm tra Internet Explorer 11 đã cài đặt:
SELECT path,filename,extension,version FROM CIM_DataFile WHERE path="\\Program Files\\Internet Explorer\\" AND filename="iexplore" AND extension="exe" AND version>"11.0"
Kiểm tra bộ lọc WMI GPO bằng PowerShell
Khi tạo truy vấn WMI, đôi khi bạn cần lấy giá trị các tham số WMI khác nhau trên máy tính. Bạn có thể lấy thông tin này bằng cmdlet Get-WMIObject. Ví dụ, tôi cần hiển thị thuộc tính và giá trị WMI của lớp Win32_OperatingSystem:
Get-WMIObject Win32_OperatingSystem
SystemDirectory : C:\WINDOWS\system32
Organization :
BuildNumber : 17134
RegisteredUser : Windows User
SerialNumber : 00331-10000-00001-AA146
Version : 10.0.17134
Để hiển thị tất cả thuộc tính lớp có sẵn:
Get-WMIObject Win32_OperatingSystem| Select *

Bạn có thể dùng PowerShell để kiểm tra bộ lọc WMI trên máy tính. Giả sử bạn đã viết một truy vấn WMI phức tạp và muốn kiểm tra xem máy tính có khớp với truy vấn này hay không. Ví dụ, bạn tạo bộ lọc WMI để kiểm tra IE 11 trên máy tính. Bạn có thể kiểm tra truy vấn WMI này trên máy tính đích bằng cmdlet get-wmiobject:
get-wmiobject -query 'SELECT * FROM CIM_DataFile WHERE path="\\Program Files\\Internet Explorer\\" AND filename="iexplore" AND extension="exe" AND version LIKE "11.%"'
Nếu lệnh này trả về kết quả, thì máy tính đáp ứng điều kiện truy vấn. Nếu lệnh get-wmiobject không trả về gì, máy tính không khớp với truy vấn bộ lọc WMI.
Ví dụ, khi chạy lệnh chỉ định trên máy tính với Windows 10 và IE 11, lệnh sẽ trả về:
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

Điều này có nghĩa là IE 11 được cài đặt trên máy tính và GPO với bộ lọc WMI như vậy sẽ được áp dụng cho máy tính này.
Vậy, chúng ta đã xem cách sử dụng bộ lọc WMI để áp dụng GPO chỉ cho máy tính đáp ứng các truy vấn WMI khác nhau. Cần lưu ý sự hiện diện của bộ lọc WMI khi phân tích lý do khiến một GPO cụ thể không được áp dụng trên máy tính.