WMI自体が消滅するのではなく、wmic.exeが消滅
まず最初にハッキリさせておくと、廃止となるのは、Windowsに標準で含まれていたwmic.exeというコマンドであり、Windows管理のための情報を提供するWMI(Windows Management Instrumentation)ではない。
つまり、情報管理の仕組みはそのまま残るが、cmd.exeなどからwmic.exeというコマンドを使って情報を得る方法が廃止される。ただし、PowerShell/Windows PowerShellからは、組み込みのコマンドを使ってWMIをアクセスする仕組みがあるので実用上の問題はない。あるとすれば、wmic.exeを使っているBatchファイルで、これはwmic.exeを使わないように書き換える必要がある。
では、そもそも「WMI」とは何か? WMIは、Windowsからシステム情報を取り出すための仕組みである。システム情報といっても、ハードウェアやその状態、さらには論理デバイスやデバイスドライバなど、さまざまな情報がある。これらを分類、整理して提供するのがWMIの役割である。
たとえば、物理メモリの情報を得たければ、以下のPowerShell(Windows PowerShellも同じ)コマンドを実行する。
Get-WmiObject -Class win32_physicalmemory | select tag,typedetail,DeviceLocator,Speed
以下の表は、PowerShellのWMI関連コマンドの一覧である。WMIは、こうしたコマンドを使ってPowerShellから操作できる。
現在はWMIからCIMに移行する最中
では、なぜ、wmic.exeは廃止されるのだろうか? 実はWMIがMicrosoftで開発されたあと、これを元に1999年CIM(Common Information Model)という仕様が制定された。CIMは、多数のメーカーなどが参加するDMTF(Distributed Management Task Force)により標準化され、プラットフォームに依存しない。
Microsoftのドキュメントを見ると、WMIはCIMに準拠して作られたという記述があるが、WMIは1996年のWindows NT 4.0に最初に搭載されており、WMIの方が先行していた。また、Windows PowerShellは、2012年のWindows 8に標準搭載されたWindows PowerShell Ver.3.0で、CIMコマンドを搭載している。
最大の違いは、WMIがMicrosoft固有のDCOMで他のマシンと通信(リモート管理)するのに対して、CIMは、HTTP/HTTPSベースのWS-Manを使う。これにより、プラットフォームに依存しない通信ができる。WMIからCIMに移行するのには、こうした通信プロトコルの問題もあった。
CIMは、プラットフォームに依存しないように作られているが、メーカー固有の情報を含め、そこにWMI相当の機能が組み込まれている。つまり、CIMは、WMIの上位互換といえる。また、WMI同様にPowerShell/Windows PowerShellには、CIM関連のコマンドが用意されている。
簡単に言えば、WMIをCIMで置き換える過渡期にあり、そのために予告の上、wmic.exeが廃止されたわけだ。というのも、wmic.exeはWMIにしか対応していないからだ。Windows PowerShellでは、WMI関連のコマンドは廃止されてはいないが、現在の推奨環境であるPowerShellでは、互換環境で実行されている。
これは、Windows PowerShellをバックグラウンドで起動、コマンドを実行させて結果をPowerShell側に戻している。このため、PowerShellでGet-Commandを実行すると、関数とコマンドの2つのGet-WMIObjectが見つかる。関数のGet-WMIObjectは、互換環境を呼び出して結果を得るもの(これはPowerShellが自動的に定義する)で、コマンドのGet-WMIObjectは、関数版を呼び出して動作する。
WMIとCIM、似たようなものが2つあると思っていた人は、今後、CIMを利用するようにすればよい。これまで、Get-WMIObjectで済ませていたことは、Get-CIMInstanceを使うようにすればよい。
WMIでは、「Object」をクラスから生成されたインスタンスの意味で利用していたが、CIMでは、そのあたりがハッキリしている。オブジェクトを本来の意味である「プログラムで扱う対象」あるいは「プロパティとメソッドからなるプログラムの単位、総称」として使い、クラスから生成されたものをインスタンスと呼ぶ。このため、Get-WMIObjectがGet-CIMInstanceになるわけだ。
さて、Windowsの管理では、Win32で始まるクラスを使う。どんなクラスがあるのかは、Get-CIMClassコマンドを使い、
Get-CimClass -ClassName Win32_*
とする。
Windowsで利用できるクラスに関しては、以下にドキュメントがある。
●WMI リファレンス - Win32 apps | Microsoft Learn
https://learn.microsoft.com/ja-jp/windows/win32/wmisdk/wmi-reference
ドキュメントの表記がいまだにWMIだが、内容としては、WMI、CIMどちらにも役立つものだ。
CIMを使いこなすと、Windowsからさまざまな管理情報を得ることが可能になる。前記のドキュメントにざっと目を通しておくだけでも、いざというときにCIM経由で情報が入手できることもあるだろう。
本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事
-
第541回
PC
AIを組み込んだWindowsターミナル「Intelligent Terminal」をインストールして試してみる -
第540回
PC
Windows 11に付属の新しいOutlookでアカウント設定をする -
第539回
PC
Microsoft製の新しいWindows用日本語入力「Copilot Keyboard」を使う -
第538回
PC
PowerShellをシェルとして使うためのポイント【情報表示のやり方】 -
第537回
PC
PowerShellをシェルとして使うためのポイントを解説 -
第536回
PC
Microsoft製のコンソールエディタMS-Editが2.0になり、文法ハイライト機能が搭載 -
第535回
PC
WSLコンテナーのプレビューを試す 今年はWSLに動きがありそうだ -
第534回
PC
Windows 11におけるアプリインストーラーとwinget -
第533回
PC
PCの世界ではすっかり存在感が薄くなった光学メディアをあらためて整理 -
第532回
PC
モニターの情報が含まれる「VESA EDID」をWindowsで調べる方法 - この連載の一覧へ













