wmic(Windows Management Instrumentation Command-line)は、Windowsのあらゆるシステム情報をコマンドラインから取得・操作できるツールです。OS情報・CPU・メモリ・ディスク・プロセス・サービス・インストール済みソフト一覧まで、GUIで確認していた情報をバッチファイルから自動取得できます。
「複数PCのハードウェア構成を一括で台帳化したい」「ディスク容量が一定以下になったらアラートを出したい」「特定ソフトウェアが全PCにインストールされているか確認したい」—そういった現場の自動化ニーズにwmicは直接応えてくれます。
本記事ではwmicの主要エイリアスと動詞を体系的に整理し、変数への格納・CSV出力・実践的な自動化パターンまで解説します。
wmicとは
wmicはWindows XP以降に搭載されたWMI(Windows Management Instrumentation)へのコマンドラインインターフェースです。WMIはWindowsの管理機能を統一的に操作するためのフレームワークで、wmicはその情報をバッチファイルから読み書きするための窓口となります。
wmicを使う代表的なシーンは次のとおりです。
- 資産管理・棚卸し: 複数PCのOS・ハード構成・インストール済みソフトを一括収集してExcelやDBに格納する
- 監視・アラート: ディスク容量やプロセス動作状況を定期チェックして異常を検知する
- 展開確認: ソフトウェア配布後に対象PCへのインストール成功を自動検証する
- ログ記録: PC起動時にシステム情報をログファイルへ自動書き出しする
Microsoftは
wmicをWindows 11で非推奨(deprecated)としており、将来的に削除される可能性があります。Windows 11環境ではPowerShellのGet-CimInstanceへの移行が推奨されていますが、Windows 10・Windows Server環境では引き続き利用可能です。本記事ではwmicの基本とPowerShellへの移行例を合わせて解説します。主要エイリアス一覧
wmicでは管理対象ごとに「エイリアス」と呼ばれる短縮名が用意されています。以下が現場でよく使うエイリアスです。
| エイリアス | 対象 | 主な用途 |
|---|---|---|
os |
オペレーティングシステム | OS名・バージョン・起動時刻 |
cpu |
プロセッサ | CPU名・コア数・クロック速度 |
computersystem |
コンピュータシステム | PC名・製造元・モデル・物理メモリ合計 |
memorychip |
メモリモジュール | スロット・容量・速度 |
bios |
BIOS | バージョン・製造元・日付 |
logicaldisk |
論理ドライブ | ドライブレター・空き容量・合計容量 |
diskdrive |
物理ディスク | モデル・シリアル・サイズ・メディア種別 |
partition |
パーティション | 名前・サイズ・種別 |
process |
プロセス | 名前・PID・メモリ使用量・起動時刻 |
service |
サービス | 名前・状態・起動種別 |
startup |
スタートアップ項目 | 自動起動プログラムの一覧 |
product |
インストール済みソフト(MSI) | 名前・バージョン・ベンダー |
nic |
ネットワークアダプター | 名前・MACアドレス・有効状態 |
nicconfig |
NIC設定 | IPアドレス・サブネット・DHCP設定 |
useraccount |
ユーザーアカウント | 名前・有効状態・SID |
group |
ローカルグループ | グループ名・説明 |
share |
共有フォルダ | 共有名・パス・最大接続数 |
printer |
プリンター | 名前・ポート・デフォルト設定 |
基本構文と動詞
wmic <エイリアス> [where 条件] <動詞> [プロパティ] 主な動詞: list [full|brief|instance|status] 一覧表示 get [プロパティ名,...] 指定プロパティを取得 call <メソッド名> [引数] メソッドを実行(プロセス終了など) delete インスタンスを削除 出力形式オプション (/format): wmic <エイリアス> get <プロパティ> /format:list 各行に「プロパティ=値」形式 wmic <エイリアス> get <プロパティ> /format:csv CSV形式(ヘッダー付き) wmic <エイリアス> get <プロパティ> /format:table テーブル形式(デフォルト)
@echo off :: テーブル形式(デフォルト) wmic os get Caption,Version :: list形式(変数抽出しやすい) wmic os get Caption,Version /format:list :: CSV形式(Excelに貼りやすい) wmic os get Caption,Version /format:csv :: ファイルに直接書き出す(/output: 指定) wmic /output:"C:\logs\os_info.txt" os get Caption,Version /format:list
wmic /output:"ファイルパス" エイリアス get ... の形で書き出し先を指定できます。ただし出力ファイルはUTF-16 LEで書き出されるため、後でテキストエディタで開くときは文字化けに注意してください。バッチ内で処理する場合はfor /fのusebackqオプションを使うか、wmic ... /format:list | findstr "="でパイプ処理するほうが安定します。OS情報を取得する
@echo off :: OS名・バージョン・ビルド番号 wmic os get Caption,Version,BuildNumber /format:list :: OSアーキテクチャ(32bit/64bit) wmic os get OSArchitecture /format:list :: システムの起動時刻 wmic os get LastBootUpTime /format:list :: インストール日時 wmic os get InstallDate /format:list :: ログオン中のユーザー数 wmic os get NumberOfUsers /format:list
@echo off
setlocal enabledelayedexpansion
:: Caption(OS名)を変数に格納
for /f "tokens=2 delims==" %%v in 'wmic os get Caption /format:list ^| findstr "="') do (
set OS_NAME=%%v
)
:: BuildNumber を変数に格納
for /f "tokens=2 delims==" %%v in ('wmic os get BuildNumber /format:list ^| findstr "="') do (
set BUILD=%%v
)
echo OS: %OS_NAME%
echo Build: %BUILD%
PCの起動時間をログに記録する実践例はPCの起動時間・稼働時間をログに記録する方法も参考にしてください。
WMI DATETIME形式の読み方
LastBootUpTimeやInstallDateは20250101120000.000000+540のような形式で返されます。読み方は次のとおりです。
| 位置 | 内容 | 例 |
|---|---|---|
| 1〜4文字目 | 年 | 2025 |
| 5〜6文字目 | 月 | 01 |
| 7〜8文字目 | 日 | 01 |
| 9〜10文字目 | 時 | 12 |
| 11〜12文字目 | 分 | 00 |
| 13〜14文字目 | 秒 | 00 |
| +540 | UTCオフセット(分) | +9時間=JST |
@echo off
setlocal
for /f "tokens=2 delims==" %%v in ('wmic os get LastBootUpTime /format:list ^| findstr "="') do (
set DT=%%v
)
:: WMI DATETIMEを分解: YYYYMMDDHHMMSS.xxxxxx+offset
set YEAR=%DT:~0,4%
set MON=%DT:~4,2%
set DAY=%DT:~6,2%
set HOUR=%DT:~8,2%
set MIN=%DT:~10,2%
set SEC=%DT:~12,2%
echo 起動時刻: %YEAR%/%MON%/%DAY% %HOUR%:%MIN%:%SEC%
コンピュータ・CPU・メモリ情報
@echo off :: コンピュータ名・ドメイン・製造元・モデル wmic computersystem get Name,Domain,Manufacturer,Model /format:list :: CPU名・コア数・論理プロセッサ数・クロック速度 wmic cpu get Name,NumberOfCores,NumberOfLogicalProcessors,MaxClockSpeed /format:list :: 物理メモリの合計(バイト単位) wmic computersystem get TotalPhysicalMemory /format:list :: メモリモジュール情報(スロット・容量・速度) wmic memorychip get BankLabel,Capacity,Speed /format:list :: BIOSバージョン・製造元 wmic bios get Manufacturer,SMBIOSBIOSVersion,ReleaseDate /format:list
@echo off
setlocal enabledelayedexpansion
:: TotalPhysicalMemory(バイト)を取得してGBに変換
for /f "tokens=2 delims==" %%m in ('wmic computersystem get TotalPhysicalMemory /format:list ^| findstr "="') do (
set /a MEM_GB=%%m / 1073741824
)
echo 物理メモリ: %MEM_GB% GB
ディスク・ドライブ情報
論理ドライブの空き容量
@echo off :: 全論理ドライブの情報(ドライブレター・ラベル・空き容量・合計容量) wmic logicaldisk get DeviceID,VolumeName,FreeSpace,Size /format:list :: Cドライブのみ wmic logicaldisk where "DeviceID='C:'" get FreeSpace,Size /format:list :: 空き容量が10GB以下のドライブを検出 wmic logicaldisk where "FreeSpace < 10737418240" get DeviceID,FreeSpace
@echo off
setlocal enabledelayedexpansion
for /f "tokens=2 delims==" %%f in ('wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:list ^| findstr "="') do (
set /a FREE_GB=%%f / 1073741824
)
echo Cドライブ空き容量: %FREE_GB% GB
:: 5GB以下なら警告
if %FREE_GB% lss 5 (
echo [警告] Cドライブの空き容量が残り %FREE_GB% GB です!
)
物理ディスク情報
@echo off :: 物理ディスクのモデル・シリアル・サイズ wmic diskdrive get Model,SerialNumber,Size /format:list :: ディスクの種類(HDD/SSD判定の参考) wmic diskdrive get Model,MediaType /format:list :: パーティション情報 wmic partition get Name,Size,Type /format:list
プロセス管理
プロセスの一覧取得・強制終了など、プロセス監視バッチの基盤として活用できます。
@echo off
:: 全プロセスの一覧(名前・PID・メモリ使用量)
wmic process get Name,ProcessId,WorkingSetSize /format:list
:: 名前で絞り込み
wmic process where "Name='notepad.exe'" get ProcessId,WorkingSetSize
:: プロセスが起動しているか確認
wmic process where "Name='myapp.exe'" get ProcessId >nul 2>&1
if %errorlevel% equ 0 (
echo myapp.exe は起動中です
) else (
echo myapp.exe は起動していません
)
@echo off
setlocal enabledelayedexpansion
:: PIDを取得して変数に格納
set PID=
for /f "tokens=2 delims==" %%p in ('wmic process where "Name='notepad.exe'" get ProcessId /format:list ^| findstr "="') do (
set PID=%%p
)
if defined PID (
echo notepad.exe の PID: %PID%
) else (
echo notepad.exe は起動していません
)
@echo off :: プロセス名で終了 wmic process where "Name='notepad.exe'" call terminate :: PIDで終了 wmic process where "ProcessId=1234" call terminate :: メモリ使用量が500MB超のプロセス一覧を表示(確認用) wmic process where "WorkingSetSize > 524288000" get Name,ProcessId,WorkingSetSize :: 上記を確認後、終了させる場合はコメントアウトを外す :: wmic process where "WorkingSetSize > 524288000" call terminate
インストール済みソフト一覧
資産管理・棚卸しや、特定ソフトウェアのバージョン確認に使います。
@echo off :: インストール済みソフト一覧(名前・バージョン・ベンダー) wmic product get Name,Version,Vendor /format:list :: CSVにエクスポート(資産管理向け) wmic product get Name,Version,Vendor /format:csv > C:\logs\installed_software.csv :: 特定ソフトのバージョン確認(Javaを例に) wmic product where "Name like '%%Java%%'" get Name,Version /format:list :: バージョンが古い(1.x)のJavaを検索 wmic product where "Name like '%%Java%%' and Version like '1.%%'" get Name,Version
wmic productはMSI(Windowsインストーラー)でインストールされたソフトのみを返します。ポータブルアプリや一部のInno Setup・NSIS形式のインストーラーは表示されません。また、実行に数秒〜数十秒かかることがあります。網羅的に調べるにはレジストリ経由のreg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstallが有効です。スタートアップ項目の確認
@echo off :: スタートアップ項目一覧(名前・コマンド・ユーザー・場所) wmic startup get Name,Command,User,Location /format:list :: 特定のエントリを確認 wmic startup where "Name like '%%MyApp%%'" get Name,Command,Location
サービス情報の取得
詳しいサービスの起動・停止操作はWindowsサービスを起動・停止する方法を参照してください。
@echo off :: 全サービスの一覧(名前・表示名・状態・起動種別) wmic service get Name,DisplayName,State,StartMode /format:list :: 実行中のサービスのみ wmic service where "State='Running'" get Name,DisplayName /format:list :: 自動起動だが停止中のサービスを検出(異常検知に活用) wmic service where "StartMode='Auto' and State='Stopped'" get Name,DisplayName :: 特定サービスの状態確認(Windows Updateを例に) wmic service where "Name='wuauserv'" get State,StartMode /format:list
@echo off
setlocal
set SVC_NAME=spooler
set STATE=
for /f "tokens=2 delims==" %%v in ('wmic service where "Name='%SVC_NAME%'" get State /format:list ^| findstr "="') do (
set STATE=%%v
)
if /i "%STATE%"=="Running" (
echo %SVC_NAME% は起動中です
) else (
echo %SVC_NAME% は停止中です(状態: %STATE%)
)
NIC・ネットワーク情報
wmic nicでNICの一覧を、wmic nicconfigでIPアドレスなどの設定を取得できます。より詳細なネットワーク設定の操作はnetshコマンド完全ガイドを参照してください。
@echo off :: NICの一覧(名前・MACアドレス・有効状態) wmic nic get Name,MACAddress,NetEnabled /format:list :: 有効なNICのみ wmic nic where "NetEnabled=True" get Name,MACAddress /format:list :: IPアドレス設定一覧(DHCP有無・IP・サブネット・デフォルトGW) wmic nicconfig where "IPEnabled=True" get Description,IPAddress,IPSubnet,DefaultIPGateway,DHCPEnabled /format:list
@echo off
setlocal
:: 有効な最初のNICのMACアドレスを取得
set MAC=
for /f "tokens=2 delims==" %%m in ('wmic nic where "NetEnabled=True" get MACAddress /format:list ^| findstr "="') do (
if not defined MAC set MAC=%%m
)
if defined MAC (
echo MACアドレス: %MAC%
) else (
echo 有効なNICが見つかりません
)
ユーザーアカウント情報
@echo off
:: ローカルユーザー一覧(名前・有効状態・SID)
wmic useraccount get Name,Disabled,SID /format:list
:: 有効なユーザーのみ
wmic useraccount where "Disabled=False" get Name,SID /format:list
:: 特定ユーザーのSIDを取得
for /f "tokens=2 delims==" %%s in ('wmic useraccount where "Name='yamada'" get SID /format:list ^| findstr "="') do (
set USER_SID=%%s
)
echo yamada の SID: %USER_SID%
:: ローカルグループ一覧
wmic group get Name,Description /format:list
共有フォルダ・プリンター情報
@echo off :: 共有フォルダ一覧 wmic share get Name,Path,Description /format:list :: 管理共有($付き)を除いた共有フォルダ wmic share where "Type=0" get Name,Path /format:list :: プリンター一覧 wmic printer get Name,PortName,Default /format:list :: デフォルトプリンター wmic printer where "Default=True" get Name,PortName /format:list
システム情報のCSV出力・レポート化
複数の情報をまとめてファイルに出力して台帳として活用できます。
@echo off
setlocal
set OUT=C:\logs\inventory_%COMPUTERNAME%_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.txt
if not exist C:\logs mkdir C:\logs
(
echo === システム棚卸しレポート ===
echo 収集日時: %DATE% %TIME%
echo.
echo [コンピュータ情報]
wmic computersystem get Name,Manufacturer,Model,TotalPhysicalMemory /format:list
echo.
echo [OS情報]
wmic os get Caption,Version,BuildNumber,OSArchitecture,LastBootUpTime /format:list
echo.
echo [CPU情報]
wmic cpu get Name,NumberOfCores,NumberOfLogicalProcessors,MaxClockSpeed /format:list
echo.
echo [ディスク情報]
wmic logicaldisk get DeviceID,VolumeName,FreeSpace,Size /format:list
echo.
echo [NIC情報]
wmic nic where "NetEnabled=True" get Name,MACAddress /format:list
echo.
echo [インストール済みソフト]
wmic product get Name,Version /format:csv
) > "%OUT%"
echo レポート作成完了: %OUT%
このバッチをタスクスケジューラで定期実行すれば、PC台帳の自動更新ができます。
実践パターン
パターン1: 複数PCの一括ハードウェア棚卸し
wmic /node:ホスト名を使ってリモートPCの情報も取得できます。pc_list.txtに対象PCのホスト名を1行ずつ書いておき、一括収集するパターンです。
@echo off
setlocal enabledelayedexpansion
:: PC一覧ファイル(pc_list.txt に1行1ホスト名)
set PC_LIST=C:\admin\pc_list.txt
set OUT=C:\logs\inventory_all_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.csv
echo ComputerName,OS,CPU,MemoryGB,DiskFreeGB > "%OUT%"
for /f "tokens=*" %%h in ('type "%PC_LIST%"') do (
set HOST=%%h
echo 収集中: !HOST!
set OS_NAME=
set CPU_NAME=
set MEM_GB=0
set FREE_GB=0
for /f "tokens=2 delims==" %%o in ('wmic /node:"!HOST!" os get Caption /format:list 2^>nul ^| findstr "="') do set OS_NAME=%%o
for /f "tokens=2 delims==" %%c in ('wmic /node:"!HOST!" cpu get Name /format:list 2^>nul ^| findstr "="') do set CPU_NAME=%%c
for /f "tokens=2 delims==" %%m in ('wmic /node:"!HOST!" computersystem get TotalPhysicalMemory /format:list 2^>nul ^| findstr "="') do set /a MEM_GB=%%m/1073741824
for /f "tokens=2 delims==" %%f in ('wmic /node:"!HOST!" logicaldisk where "DeviceID='C:'" get FreeSpace /format:list 2^>nul ^| findstr "="') do set /a FREE_GB=%%f/1073741824
echo !HOST!,"!OS_NAME!","!CPU_NAME!",!MEM_GB!,!FREE_GB! >> "%OUT%"
)
echo 棚卸し完了: %OUT%
① リモートPCでWMIサービス(winmgmt)が起動していること
② Windowsファイアウォールでリモート管理(TCP 135 + 動的ポート)が許可されていること
③ 実行アカウントが対象PC上の管理者権限を持つこと
別ドメイン・ワークグループ環境では
wmic /node:"PC名" /user:"管理者名" /password:"パスワード" ... で認証情報を指定できますが、スクリプト内にパスワードを平文で書かないよう注意してください。パターン2: ディスク容量の定期監視アラート
全ドライブを走査して空き容量が閾値以下のドライブをログに記録します。
@echo off
setlocal enabledelayedexpansion
set THRESHOLD=10
set LOG=C:\logs\disk_alert.log
:: ドライブ一覧を1行ずつ処理
for /f "tokens=2 delims==" %%d in ('wmic logicaldisk where "DriveType=3" get DeviceID /format:list ^| findstr "="') do (
set DRIVE=%%d
:: 各ドライブの空き容量を取得
for /f "tokens=2 delims==" %%f in ('wmic logicaldisk where "DeviceID='%%d'" get FreeSpace /format:list ^| findstr "="') do (
set /a FREE_GB=%%f/1073741824 2>nul
if !FREE_GB! lss %THRESHOLD% (
echo [%DATE% %TIME%] 警告: !DRIVE! 空き容量 !FREE_GB! GB >> "%LOG%"
echo [警告] !DRIVE! の空き容量が !FREE_GB! GB です
)
)
)
パターン3: 特定ソフトウェアの自動インストール確認
展開作業後にソフトウェアが正しくインストールされているかを確認するバッチです。
@echo off
setlocal
set RESULT=0
call :check "Java"
call :check "Microsoft Visual C++"
call :check "Google Chrome"
if %RESULT% neq 0 (
echo 未インストールのソフトがあります
exit /b 1
)
echo 全ソフトのインストールを確認しました
exit /b 0
:check
set KEYWORD=%~1
wmic product where "Name like '%%%KEYWORD%%%'" get Name >nul 2>&1
if %errorlevel% equ 0 (
echo [OK] %KEYWORD% インストール済み
) else (
echo [NG] %KEYWORD% が見つかりません
set RESULT=1
)
exit /b
パターン4: プロセス暴走検知と自動再起動
CPU・メモリを過剰に消費するプロセスを検知して終了・再起動します。
@echo off
setlocal enabledelayedexpansion
set TARGET=myapp.exe
set TARGET_PATH=C:\apps\myapp.exe
set MEM_LIMIT=524288000
:loop
timeout /t 60 /nobreak >nul
:: プロセスが存在するか確認
wmic process where "Name='%TARGET%'" get ProcessId >nul 2>&1
if %errorlevel% neq 0 (
echo [%DATE% %TIME%] %TARGET% が停止しています。再起動します。
start "" "%TARGET_PATH%"
goto :loop
)
:: メモリ使用量を確認
for /f "tokens=2 delims==" %%m in ('wmic process where "Name='%TARGET%'" get WorkingSetSize /format:list ^| findstr "="') do (
set /a MEM_MB=%%m/1048576
if !MEM_MB! gtr 500 (
echo [%DATE% %TIME%] %TARGET% のメモリ使用量が !MEM_MB! MB超。再起動します。
wmic process where "Name='%TARGET%'" call terminate >nul
timeout /t 3 /nobreak >nul
start "" "%TARGET_PATH%"
)
)
goto :loop
wmic と PowerShell の対応表
Windows 11以降やPowerShell環境への移行を考えている場合の参考に。PowerShellのGet-CimInstanceはwmicの後継として設計されており、UTF-16 LEエンコーディング問題が発生しないため文字列処理も安定します。
| wmic コマンド | PowerShell 相当 |
|---|---|
| wmic os get Caption,Version | Get-CimInstance Win32_OperatingSystem | Select Caption,Version |
| wmic os get LastBootUpTime | (Get-CimInstance Win32_OperatingSystem).LastBootUpTime |
| wmic cpu get Name,NumberOfCores | Get-CimInstance Win32_Processor | Select Name,NumberOfCores |
| wmic computersystem get TotalPhysicalMemory | (Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory |
| wmic logicaldisk get DeviceID,FreeSpace,Size | Get-CimInstance Win32_LogicalDisk | Select DeviceID,FreeSpace,Size |
| wmic process get Name,ProcessId | Get-Process | Select Name,Id |
| wmic process where “Name=’x.exe'” call terminate | Stop-Process -Name “x” -Force |
| wmic product get Name,Version | Get-CimInstance Win32_Product | Select Name,Version |
| wmic service get Name,State | Get-Service | Select Name,Status |
| wmic nic get Name,MACAddress | Get-CimInstance Win32_NetworkAdapter | Select Name,MACAddress |
| wmic useraccount get Name,SID | Get-LocalUser | Select Name,SID |
| wmic /node:”PC” os get Caption | Get-CimInstance -ComputerName “PC” Win32_OperatingSystem | Select Caption |
よくあるエラーと対処
| エラー・症状 | 原因 | 対処 |
|---|---|---|
| No Instance(s) Available(インスタンスなし) | 条件に一致するインスタンスが存在しない | 条件(where句)が正しいか確認する。プロセス名はnotepad.exeのように.exeまで含める |
| wmic /node: でリモートPCに接続できない | WMIサービスが停止中またはファイアウォールでブロック | 対象PCでWMIサービス(winmgmt)が起動しているか確認。ファイアウォールで「リモート管理」ルールを有効化する |
| wmic product get が非常に遅い(数十秒) | wmic productはWindowsインストーラーDBを参照するため重い | タイムアウトを設定するか、PowerShellのGet-CimInstanceを検討する |
| 変数に空白やゴミ文字が混入する | wmicの出力はUTF-16 LEのため先頭にBOMが混入することがある | /format:listで「プロパティ=値」形式にしてからfindstr "="でフィルタする方法が最も安定する |
| Invalid query エラー | where句のシングルクォートや条件式の書き方が誤っている | 文字列条件は"Name='process.exe'"のようにダブルクォートとシングルクォートを組み合わせる |
| for /f でパイプ処理するとエラーになる | パイプ内の特殊文字(|・>)がエスケープ不足 |
パイプを^|、リダイレクトを2^>nulのようにキャレット^でエスケープする |
wmicの出力はUTF-16 LE(BOM付き)です。ターミナルに表示するときはchcp 65001でUTF-8に切り替えても問題ないことが多いですが、バッチのfor /fで処理するときに先頭に不可視のBOM文字が入り変数の比較が失敗することがあります。/format:list | findstr "="でフィルタすることでBOMが除去されてキレイな値だけ取り出せます。よくある質問
Get-CimInstanceへの移行を検討してください。wmic /node:"PC名" /user:"DOMAIN\admin" /password:"pass" os get Captionのように認証情報を指定することもできますが、スクリプト内にパスワードを平文で書かないよう注意してください。wmic process where "Name='Notepad.exe'"と"Name='notepad.exe'"は別のものとして扱われます。タスクマネージャーで表示されている正確な名前(大文字・小文字)で指定してください。set /aは整数演算のみのため結果は整数(切り捨て)になります。wmic productはMSI(Windowsインストーラー)形式でインストールされたソフトのみが対象です。ポータブルアプリやInno Setup・NSIS形式のインストーラーは表示されないことがあります。その場合はレジストリのHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstallをreg queryで調べる方法が網羅的です。wmicの日時は20250101120000.000000+540のような形式(WMI DATETIME形式)で返されます。:~0,4などの部分文字列抽出で年月日時分秒をそれぞれ取り出すか、PowerShellで変換する方法が一般的です。変換例は本記事の「起動時刻を読みやすい形式に変換」を参照してください。wmic nicconfig where "IPEnabled=True" get IPAddress /format:listで取得できます。ただし複数NICがある場合は複数行返ってくるため、最初のアダプターのIPだけ欲しい場合はfor /fとgotoで1件目だけ取り出す工夫が必要です。IPアドレスを自動取得してログに記録する方法も参考にしてください。まとめ
wmicはWindowsシステム管理の現場で長年活用されてきた強力なツールです。特に「複数PCの一括棚卸し」「定期的な容量監視」「展開後のソフト確認」といった繰り返し作業をバッチで自動化するときに威力を発揮します。
本記事のポイントをまとめると次のとおりです。
- 基本形は「エイリアス → get → プロパティ → /format:list」: この形で変数抽出が最も安定する
- 変数への格納は
for /f "tokens=2 delims==" | findstr "="パターンを使う: BOM問題を回避できる - リモートPCには
/node:ホスト名を先頭に追加するだけ: 複数PC棚卸しをループで自動化できる wmic productはMSIのみ・処理が重い: 網羅的な確認はレジストリ経由を補完的に使う- Windows 11以降はPowerShellへの移行を計画する:
Get-CimInstanceは同等機能を持ち文字列処理も安定

