【bat】wmicコマンド完全ガイド|システム情報取得・プロセス管理・ディスク確認・インストール済みソフト一覧・バッチ自動化パターンまで

【bat】wmicコマンド完全ガイド|システム情報取得・プロセス管理・ディスク確認・インストール済みソフト一覧・バッチ自動化パターンまで bat

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起動時にシステム情報をログファイルへ自動書き出しする
Windows 11での注意点
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
/output: オプションについて
wmic /output:"ファイルパス" エイリアス get ... の形で書き出し先を指定できます。ただし出力ファイルはUTF-16 LEで書き出されるため、後でテキストエディタで開くときは文字化けに注意してください。バッチ内で処理する場合はfor /fusebackqオプションを使うか、wmic ... /format:list | findstr "="でパイプ処理するほうが安定します。

OS情報を取得する

OS情報取得.bat
@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
OS情報を変数に格納.bat
@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形式の読み方

LastBootUpTimeInstallDate20250101120000.000000+540のような形式で返されます。読み方は次のとおりです。

位置 内容
1〜4文字目 2025
5〜6文字目 01
7〜8文字目 01
9〜10文字目 12
11〜12文字目 00
13〜14文字目 00
+540 UTCオフセット(分) +9時間=JST
起動時刻を読みやすい形式に変換.bat
@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・メモリ情報

ハードウェア情報.bat
@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
メモリ合計をGBで取得.bat
@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

ディスク・ドライブ情報

論理ドライブの空き容量

ディスク容量確認.bat
@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
Cドライブ空き容量をGBで取得.bat
@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 です!
)

物理ディスク情報

物理ディスク情報.bat
@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

プロセス管理

プロセスの一覧取得・強制終了など、プロセス監視バッチの基盤として活用できます。

プロセス一覧・確認.bat
@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 は起動していません
)
PIDを変数に格納.bat
@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 は起動していません
)
プロセス強制終了.bat
@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

インストール済みソフト一覧

資産管理・棚卸しや、特定ソフトウェアのバージョン確認に使います。

インストール済みソフト.bat
@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の注意点
wmic productはMSI(Windowsインストーラー)でインストールされたソフトのみを返します。ポータブルアプリや一部のInno Setup・NSIS形式のインストーラーは表示されません。また、実行に数秒〜数十秒かかることがあります。網羅的に調べるにはレジストリ経由のreg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstallが有効です。

スタートアップ項目の確認

スタートアップ確認.bat
@echo off
:: スタートアップ項目一覧(名前・コマンド・ユーザー・場所)
wmic startup get Name,Command,User,Location /format:list

:: 特定のエントリを確認
wmic startup where "Name like '%%MyApp%%'" get Name,Command,Location

サービス情報の取得

詳しいサービスの起動・停止操作はWindowsサービスを起動・停止する方法を参照してください。

サービス情報.bat
@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
サービス状態を変数に格納.bat
@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コマンド完全ガイドを参照してください。

NIC情報.bat
@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
MACアドレスを変数に格納.bat
@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が見つかりません
)

ユーザーアカウント情報

ユーザー情報.bat
@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

共有フォルダ・プリンター情報

共有フォルダ・プリンター確認.bat
@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出力・レポート化

複数の情報をまとめてファイルに出力して台帳として活用できます。

system_inventory.bat
@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行ずつ書いておき、一括収集するパターンです。

multi_pc_inventory.bat
@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接続の前提条件
① リモートPCでWMIサービス(winmgmt)が起動していること
② Windowsファイアウォールでリモート管理(TCP 135 + 動的ポート)が許可されていること
③ 実行アカウントが対象PC上の管理者権限を持つこと
別ドメイン・ワークグループ環境では wmic /node:"PC名" /user:"管理者名" /password:"パスワード" ... で認証情報を指定できますが、スクリプト内にパスワードを平文で書かないよう注意してください。

パターン2: ディスク容量の定期監視アラート

全ドライブを走査して空き容量が閾値以下のドライブをログに記録します。

disk_alert.bat
@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: 特定ソフトウェアの自動インストール確認

展開作業後にソフトウェアが正しくインストールされているかを確認するバッチです。

check_software.bat
@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・メモリを過剰に消費するプロセスを検知して終了・再起動します。

process_watchdog.bat
@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の出力エンコーディング問題について
wmicの出力はUTF-16 LE(BOM付き)です。ターミナルに表示するときはchcp 65001でUTF-8に切り替えても問題ないことが多いですが、バッチのfor /fで処理するときに先頭に不可視のBOM文字が入り変数の比較が失敗することがあります。/format:list | findstr "="でフィルタすることでBOMが除去されてキレイな値だけ取り出せます。

よくある質問

QwmicはWindows 11でも使えますか?
Aはい、現時点では使えます。ただしMicrosoftは非推奨(deprecated)としており、将来のWindows更新で削除される可能性があります。長期運用するスクリプトはPowerShellのGet-CimInstanceへの移行を検討してください。
Qwmic /node: でリモートPCの情報を取得するには管理者権限が必要ですか?
Aはい。リモートPCに接続する場合、接続先PCの管理者権限を持つアカウントが必要です。wmic /node:"PC名" /user:"DOMAIN\admin" /password:"pass" os get Captionのように認証情報を指定することもできますが、スクリプト内にパスワードを平文で書かないよう注意してください。
Qwmic process where で条件指定するとき、プロセス名の大文字・小文字は区別されますか?
Aはい、区別されます。wmic process where "Name='Notepad.exe'""Name='notepad.exe'"は別のものとして扱われます。タスクマネージャーで表示されている正確な名前(大文字・小文字)で指定してください。
Qwmic logicaldisk で取得できる容量の単位は何ですか?
Aバイト(Byte)単位です。KB換算は÷1,024、MB換算は÷1,048,576、GB換算は÷1,073,741,824で計算してください。set /aは整数演算のみのため結果は整数(切り捨て)になります。
Qwmic product で特定ソフトが表示されません。
Awmic productはMSI(Windowsインストーラー)形式でインストールされたソフトのみが対象です。ポータブルアプリやInno Setup・NSIS形式のインストーラーは表示されないことがあります。その場合はレジストリのHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstallreg queryで調べる方法が網羅的です。
Qwmicで取得した日時(LastBootUpTimeなど)の形式が読みにくいです。
Awmicの日時は20250101120000.000000+540のような形式(WMI DATETIME形式)で返されます。:~0,4などの部分文字列抽出で年月日時分秒をそれぞれ取り出すか、PowerShellで変換する方法が一般的です。変換例は本記事の「起動時刻を読みやすい形式に変換」を参照してください。
QwmicでIPアドレスを取得する方法はありますか?
Aはい。wmic nicconfig where "IPEnabled=True" get IPAddress /format:listで取得できます。ただし複数NICがある場合は複数行返ってくるため、最初のアダプターのIPだけ欲しい場合はfor /fgotoで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は同等機能を持ち文字列処理も安定