GPOのWMIフィルター活用ガイド:条件別にグループポリシー適用を制御する方法
グループポリシー(GPO)におけるWMIフィルターを利用すると、さまざまな条件(ルール)を使い分けることで、クライアントコンピューターへのポリシー適用をより柔軟に制御できます。WMIフィルターとは、WMIクエリ言語(WQL)で記述された一連のWMIクエリの集合であり、特定のグループポリシーを適用すべき対象コンピューターを絞り込むために使用します。
たとえば、OUにリンクされたポリシーにWMIフィルターを設定すれば、そのポリシーをWindows 10が稼働するコンピューターにのみ適用し、他のWindowsバージョンの端末には適用しない、といった運用が可能になります。
WMIフィルター(GPOフィルタリング)は何のために使うのか?
WMI(Windows Management Instrumentation)によるグループポリシーのフィルタリングは、一般的に次のようなケースで活用されます。
- ユーザーやコンピューターが個別のOUに分けられておらず、フラットなAD構造の中に多数のドメインオブジェクトが存在する場合
- OSのバージョン、ネットワーク設定、インストール済みソフトウェアなど、WMIで取得できるあらゆる条件に基づいてポリシーの適用先を振り分けたい場合
クライアントがこうしたポリシーを処理する際、Windowsは自身の状態が指定されたWMIクエリの条件に合致しているかを確認し、条件を満たしていればそのGPOがコンピューターに適用されます。
WMIフィルターはWindows XP / Windows Server 2003で初めて導入され、最新のWindows(Windows Server 2019 / 2016、Windows 10 / 8.1)でも引き続き利用できます。
新しいWMIフィルターの作成とGPOへのリンク
新しいWMIフィルターを作成するには、グループポリシーの管理コンソール(gpmc.msc)を開き、「フォレスト」→「ドメイン」→「woshub.com」→「WMI フィルター」の順に移動します。このセクションにはADドメイン内のすべてのWMIフィルターが表示されます。「新規作成(New)」をクリックして新しいフィルターを作成しましょう。

フィルター名と説明(任意)を入力します。フィルターにWMIクエリを追加するには「追加(Add)」ボタンをクリックし、WMI名前空間(デフォルトはroot\CIMv2)を指定して、WMIクエリのコードを入力します。
WMIクエリの基本形式は以下の通りです。
Select * from <WMI Class> WHERE <Property> = <Value>
ここでは例として、Windows 10が稼働するコンピューターにのみGPOを適用できるようにするWMIフィルターを作成します。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フィルターを選択してください。この例では、プリンター割り当てポリシーをWindows 10搭載コンピューターにのみ適用する設定を行っています。

その後、ポリシーがクライアントに適用されるまで待つか、gpupdate /forceコマンドで手動更新します。クライアント側で適用状況を確認するには、gpresult /rコマンドを使用します。ポリシーの対象ではあるものの、WMIフィルターの制限によって適用されていない場合、gpresultのレポートには「Filtering: Denied (WMI Filter)(フィルター:拒否(WMIフィルター))」というステータスが表示されます。

GPO WMIフィルターの実用的なサンプル集
ここからは、現場でよく使われるWMIフィルターの具体的な例を紹介します。
WMIフィルターを使えば、OSの種類を選別できます。
- ProductType=1 – クライアント版Windows全般
- ProductType=2 – Active Directoryドメインコントローラー
- ProductType=3 – Windows Server
Windowsのバージョン番号の対応は以下の通りです。
- 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%
WMIクエリでは、論理演算子ANDやORを組み合わせて複数の条件を指定できます。たとえば、Windows Server 2016サーバーにのみポリシーを適用する場合のクエリは次のようになります。
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"
64ビットOSにのみGPOを適用する場合:
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"
ノートPCにのみ適用する場合(SCCMでノートPCを検出する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を適用する手法については、「Use WMI Filter to Apply GPO to IP Subnet」の記事も参考になります。複数の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コマンドレットが便利です。たとえば、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コマンドレットを使って対象マシン上でこのクエリをテストできます。
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フィルターの存在も必ず考慮に入れてください。
-
Windows 10でローカルグループポリシーエディターを開く7つの方法
ローカルグループポリシーエディターは、単一のユーザーインターフェースからWindowsデバイスのさまざまな設定を管理できる強力なツールです。レジストリを直接編集することなく、ユーザー構成とコンピューターの構成を変更できるため、誤操作によるシステムへの影響を抑えながら設定を行えます。正しく活用すれば、通常の方法ではアクセスできない機能の有効化・無効化も簡単に行うことが可能です。 注意: ローカルグループポリシーエディターは、Windows 10 Pro、Windows 10 Enterprise、Windows 10 Educationの各エディションでのみ利用できます。Homeエディションには
-
Windows 10 Homeにグループポリシーエディタがない?無料ツール「Policy Plus」で解決!
Windowsで特定の管理機能を有効化・制御したい場合、そのアプローチは複数ありますが、結局のところすべてレジストリ変更に行き着きます。レジストリエディタ(regedit.exe)で手動変更するか、あるいは「グループポリシー」を利用するかです。後者は管理用テンプレートの集合体で、システム機能を柔軟に設定し、それを複数の端末へ一括展開できるため、管理業務が大幅に簡素化されます。内部ではレジストリが変更されることに変わりありませんが、グループポリシーは人間が読みやすいUIエディタ経由で操作でき、手動のレジストリ編集よりはるかに安全です。唯一の問題は、Windows Homeエディションにはグループ