Windows11 24H2以降にWMICを追加

wmic

Windows10からバージョンアップしたWindows11 25H2または24H2で
c:\Users\user>wmic computersystem get model, name, manufacturer
を実行すると

C:\Users\user>wmic computersystem get model, name, manufacturer
Manufacturer  Model              Name
HP            HP ProBook 450 G6  NOTE-015

が表示され使える。

新規購入したPCWindows11 24H2では

C:\Users\user>wmic computersystem get model, name, manufacturer
'wmic' は、内部コマンド又は外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

となる。

調べてみると

Windows 10 バージョン 21H1 以降、および Windows Server の 21H1 半期チャネル リリース時点で非推奨となっています。Microsoft Learn: wmic コマンド リファレンスより

wmicを導入する

設定→システム→オプション機能を開いて「オプション機能を表示または編集する」にある機能表示ボタンをクリックします。

上記はWindows 10からWindows11にアップデートしたのでWMICが有効になっていますが、新規導入のPCにはWMICがありません

機能を表示のすぐ下にある「使用可能な機能を表示する」をクリックしてWMICを探して追加します。

しばらく待ってから(追加が完了するとキャンセルボタンが閉じるになります。)画面を閉じます。

動くようになりました。

関連項目

Microsoft Learn: wmic コマンド リファレンス

Microsoftによると、「wmicは使わずにPowerShellのコマンドで代替するように」とのことです。

WMIC代替コマンドの一例

目的 WMIC コマンド PowerShell 代替コマンド
OS情報の取得 wmic os get caption, version Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version
プロセス一覧 wmic process get name, processid Get-CimInstance Win32_Process | Select-Object Name, ProcessId
CPU情報の取得 wmic cpu get name, manufacturer Get-CimInstance Win32_Processor | Select-Object Name, Manufacturer
ディスク容量 wmic logicaldisk get name, size Get-CimInstance Win32_LogicalDisk | Select-Object DeviceId, Size
BIOS情報の取得 wmic bios get serialnumber Get-CimInstance Win32_BIOS | Select-Object SerialNumber
メモリ容量 wmic memorychip get capacity Get-CimInstance Win32_PhysicalMemory | Select-Object Capacity

これらのコマンドを使ってバッチファイルを作成することもできますね。例えばcpuzの代わりにオペレーティングシステム、CPU、メモリー、をPowerShellを使って調べるバッチファイルです。

@echo off
powershell -Command "Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version"
powershell -Command "Get-CimInstance Win32_Processor | Select-Object Name, Manufacturer"
powershell -Command "Get-CimInstance Win32_PhysicalMemory | Select-Object Tag,Manufacturer,Capacity
pause

これをcpuz.batというファイル名で保存して実行すれば

Caption                  Version
-------                  -------
Microsoft Windows 11 Pro 10.0.26200

Name                                     Manufacturer
----                                     ------------
Intel(R) Core(TM) i5-8265U CPU @ 1.60GHz GenuineIntel

Tag               Manufacturer    Capacity
---               ------------    --------
Physical Memory 0 Samsung       8589934592
Physical Memory 1 Hynix/Hyundai 8589934592

続行するには何かキーを押してください . . .

のような結果が得られます。

Windowsの25H2を表示するにはPowerShellに以下のコマンドを投げればいい。

Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | Select-Object ProductName, DisplayVersion, CurrentBuild

cpuz.batに組込みます。(“がバッティングするので一部’にしてあります。)

@echo off
powershell -Command "Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version"
powershell -Command "Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' | Select-Object ProductName, DisplayVersion, CurrentBuild"
powershell -Command "Get-CimInstance Win32_Processor | Select-Object Name, Manufacturer"
powershell -Command "Get-CimInstance Win32_PhysicalMemory | Select-Object Tag,Manufacturer,Capacity

pauseじ

実行すると

Caption                  Version
-------                  -------
Microsoft Windows 11 Pro 10.0.26200

ProductName    DisplayVersion CurrentBuild
-----------    -------------- ------------
Windows 10 Pro 25H2           26200

Name                                     Manufacturer
----                                     ------------
Intel(R) Core(TM) i5-8265U CPU @ 1.60GHz GenuineIntel

Tag               Manufacturer    Capacity
---               ------------    --------
Physical Memory 0 Samsung       8589934592
Physical Memory 1 Hynix/Hyundai 8589934592

続行するには何かキーを押してください . . .

となります。

Windows11で実行したのにWindows10が返ってきますね。これは

「Windows 10からアップグレードしたから」ではなく、クリーンインストールしたPCでも発生するMicrosoftの「意図的な仕様(バグ回避策)」が原因です。By Gemini

Microsoftは、レジストリ内の ProductName の値を「Windows 10」のまま意図的に固定しています。

理由: 世の中にある古いアプリや業務システムの中には、プログラム内でこの ProductName の文字を読み取り、「”Windows 11″ という未知のOSでは起動させない」とエラーを起こしてしまうものが多数ありました。

対策: それらのアプリが動かなくなる(互換性トラブル)のを防ぐため、Microsoftはレジストリのこの場所だけ「Windows 10」と嘘の表記を残しています。

Get-CimInstance の Version が “10.0.26200”
Windows11でもメジャーバージョン(OSバージョン)は、実は今でも「10.0」のままで、これもアプリの互換性を維持するための仕様です。

wmicが動かないという調査していて、いろいろなことがわかりました。今回はGeminiくんに色々教わりました。ありがとう