はじめに
Windowsのシステム情報取得や運用自動化において、避けて通れないのが**WMI (Windows Management Instrumentation)**です。
「名前は聞いたことがあるけど、具体的にどう使えばいいか分からない」「wmicコマンドが非推奨になって困っている」という方向けに、WMIの仕組みと現代的な操作手法を解説します。
1. WMIとは何か?
WMIは、Windows OSにおける管理情報の標準規格です。
ハードウェアのスペック、OSの設定、プロセスの稼働状況など、Windowsに関するあらゆる情報にアクセスするための「共通インターフェース」を提供します。
WMIでできることの例
- ハードウェア情報の取得: CPU、メモリ、ディスク、BIOS情報の参照
- OS状態の監視: サービス、プロセス、インストール済みアプリの管理
- イベントログの購読: 特定のログが発生した際のアラート通知
- リモート操作: ネットワーク経由での他端末の情報取得
2. WMIの構造:名前空間とクラス
WMIの情報は、フォルダ(名前空間)とファイル(クラス)のような階層構造で管理されています。
-
名前空間 (Namespace)
情報のカテゴリ分けです。最もよく使われるのは
root\cimv2で、標準的なOS情報の大半がここに含まれます。 -
クラス (Class)
具体的なデータの定義です。
Win32_という接頭辞から始まるものが多く、例えばWin32_OperatingSystemはOS自体の情報を保持しています。
3. 【実践】PowerShellでWMIを操作する
以前は wmic コマンドが主流でしたが、現在は非推奨です。これからは CIM (Common Information Model) コマンドレット を使用するのが推奨されます。
基本的な情報の取得
Get-CimInstance を使用します。
# OSの情報を取得
Get-CimInstance -ClassName Win32_OperatingSystem
# CPUの情報を取得
Get-CimInstance -ClassName Win32_Processor | Select-Object Name, NumberOfCores, MaxClockSpeed
データの絞り込み (Filter)
特定の条件に合致するものだけを抽出します。
# 実行中のプロセスから特定の名前を探す
Get-CimInstance -ClassName Win32_Process -Filter "Name = 'chrome.exe'"
4. 知っておくと便利な主要クラス一覧
逆引き的に使える、頻出のクラスを紹介します。
| カテゴリ | クラス名 | 取得できる情報 |
|---|---|---|
| システム | Win32_OperatingSystem |
OS名、バージョン、最終起動時間 |
| ハードウェア | Win32_ComputerSystem |
モデル名、メーカー、物理メモリ |
| プロセッサ | Win32_Processor |
CPU名、コア数、L2キャッシュ |
| ディスク | Win32_LogicalDisk |
ドライブレター、空き容量、全容量 |
| ネットワーク | Win32_NetworkAdapterConfiguration |
IPアドレス、MACアドレス、DHCP有効否 |
5. リモート操作の基本
WMIの真骨頂はリモート管理です。PowerShellなら -ComputerName オプションを付けるだけで、遠隔地のPC情報を取得できます。
# 特定のリモートPCのBIOS情報を取得
Get-CimInstance -ClassName Win32_BIOS -ComputerName "RemotePC01"
※リモート操作には、WinRMの有効化や適切な管理者権限が必要です。
まとめ
WMIはWindows管理の「背骨」のような技術です。
- 構造を理解する(名前空間 > クラス)
- PowerShell(CIMコマンドレット)を使う
- 必要な情報をクラスから探し出す
この3点を押さえるだけで、インフラ構築や運用の自動化効率が劇的に向上します。まずは自分のPCで Get-CimInstance を叩いてみることから始めてみてください。