5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

Windows端末の情報収集で、WMIC ではなく PowerShellコマンドレット を使ってPC情報を取得する方法をまとめます。

WMIC は Windows 10 21H1 以降で非推奨となっており、今後は Get-CimInstance などのPowerShellコマンドレットを使うのが推奨されています。

業務でよく使う項目を中心に、どのコマンドで何が取れるか を整理しました。

対象読者: PowerShell初心者、端末情報の棚卸しや資産管理を行う方


1. 取得したい情報の大枠

カテゴリ 取得内容
PC情報 メーカー名、モデル名、シリアル番号
BIOS情報 BIOSバージョン、リリース日
OS情報 Windowsのエディション、バージョン、ビルド
CPU情報 CPU名、コア数、スレッド数、キャッシュ
メモリ情報 搭載メモリ容量、メモリモジュール情報
モニタ情報 製造元、製造週、解像度、サイズ
GPU情報 GPU名、チップメーカー
カメラ情報 接続されているカメラ
光学ドライブ DVD/CD/BDドライブの有無
ネットワーク 有線LAN、Wi-Fi、WWAN
Bluetooth Bluetoothデバイス
バッテリ情報 バッテリ名、製造者、容量、電圧など
ストレージ ドライブ名、容量、シリアル番号
プログラム情報 インストール済みプログラム(Microsoft系 / その他)

2. PC情報

項目 取得内容
Manufacturer PCメーカー名
Model PCモデル名(SKUNumber)
SerialNumber シリアル番号

コマンドレット

# メーカー名・モデル名
Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object Manufacturer, Model

# シリアル番号
Get-CimInstance -ClassName Win32_BIOS | Select-Object SerialNumber

# SKUNumber(型番として使う場合)
(Get-CimInstance -ClassName Win32_ComputerSystem).SystemSKUNumber

出力結果

Manufacturer : XXXXXXXX Co., Ltd.
Model        : XX-XXXXXXXX
SerialNumber : XXXXXXXXXXX

補足: Model プロパティは内部モデル名が入ることがあります。業務で型番として使いたい場合は SystemSKUNumber を使うと、カタログに載っている型番が取得できます。
💡 私は業務でよくSKUNumberを使うことが多いのですがよく忘れます。


3. BIOS情報

項目 取得内容
Manufacturer BIOSメーカー
SMBIOSBIOSVersion BIOSバージョン
ReleaseDate リリース日
BiosCharacteristics BIOS機能情報

コマンドレット

Get-CimInstance -ClassName Win32_BIOS | Format-List Manufacturer, SMBIOSBIOSVersion, ReleaseDate, BiosCharacteristics

出力結果

Manufacturer        : XXXXXXXX International, LLC.
SMBIOSBIOSVersion   : V2.00L17
ReleaseDate         : 2024/07/12 9:00:00
BiosCharacteristics : {7, 11, 12, 15...}

参考: Win32_BIOS class - Microsoft Learn


4. OS情報

項目 取得内容
Edition Windowsエディション
DisplayVersion Windowsの表示バージョン
InstallDate インストール日
OSBuild OSビルド番号

コマンドレット

# エディション・バージョン・ビルド(レジストリから取得)
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" |
    Select-Object ProductName, DisplayVersion, CurrentBuildNumber

# インストール日
(Get-CimInstance -ClassName Win32_OperatingSystem).InstallDate.ToString("yyyy-MM-dd")

出力結果

Edition   : Windows 11 Pro
Version   : 24H2
Installed : 2024-10-01
OSBuild   : 26100

補足: Get-CimInstance Win32_OperatingSystemCaption でもエディション名は取れますが、レジストリの ProductName のほうが正確な場合があります。


5. CPU情報

項目 取得内容
Name CPU名
NumberOfCores コア数
NumberOfLogicalProcessors スレッド数
L2CacheSize L2キャッシュ
L3CacheSize L3キャッシュ

コマンドレット

# CPU基本情報
Get-CimInstance -ClassName Win32_Processor |
    Select-Object Name, NumberOfCores, NumberOfLogicalProcessors, L2CacheSize, L3CacheSize

出力結果

Name    : 13th Gen Intel(R) Core(TM) i5-1345U
Core    : 10
Thread  : 12
L2Cache : 6.5 MB
L3Cache : 12 MB

補足: L2CacheSizeL3CacheSize の単位は KB です。MB に変換するには 1024 で割ってください。


6. メモリ情報

項目 取得内容
TotalPhysicalMemory 総搭載メモリ
MemoryDevices メモリスロット数
Capacity 各メモリ容量
Speed 動作速度
Manufacturer メーカー
SerialNumber シリアル番号

コマンドレット

# 総メモリ容量
$cs = Get-CimInstance -ClassName Win32_ComputerSystem
[math]::Round($cs.TotalPhysicalMemory / 1GB, 1)

# スロット数
(Get-CimInstance -ClassName Win32_PhysicalMemoryArray).MemoryDevices

# メモリモジュール詳細
Get-CimInstance -ClassName Win32_PhysicalMemory |
    Select-Object DeviceLocator, Manufacturer, 
        @{N='CapacityMB';E={$_.Capacity/1MB}}, Speed, ConfiguredVoltage, DataWidth, SerialNumber

出力結果

Memory : 16 GB
Slot   : 2/2

Name         : DIMM1
Manufacturer : Micron Technology
Capacity     : 8192 MB
Speed        : 5600 MHz
Voltage      : 1200 mV
Bandwidth    : 64 bit
SerialNumber : 1A2B3C4D

補足: オンボードメモリの場合、スロット数が実際の物理スロットと異なる値(チャネル数)になることがあります。


7. モニタ情報

項目 取得内容
ManufacturerName 製造元コード
ProductCodeID 製品コード
YearOfManufacture 製造年
WeekOfManufacture 製造週
Resolution 解像度
ScreenSize 物理サイズ

コマンドレット

# モニタ識別情報
Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorID

# 物理サイズ
Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorBasicDisplayParams

# 解像度(サポートモード)
Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorListedSupportedSourceModes

出力結果

ManufactureCode : XXX
ManufactureDate : 2024-W12
ProductCode     : XXXX
Resolution      : 1920 x 1080
ScreenSize      : 34cm x 19cm
DiagonalSize    : 15.6 inch

補足: ManufacturerName はバイト配列で返されるため、[System.Text.Encoding]::ASCII.GetString() で文字列に変換する必要があります。

$mon = Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorID
[System.Text.Encoding]::ASCII.GetString($mon.ManufacturerName).Trim([char]0)

参考: WmiMonitorID class - Microsoft Learn


8. GPU情報

項目 取得内容
Name GPU名
AdapterCompatibility GPUメーカー

コマンドレット

Get-CimInstance -ClassName Win32_VideoController | Select-Object Name, AdapterCompatibility

出力結果

Name : Intel(R) Iris(R) Xe Graphics
Chip : Intel Corporation

9. カメラ情報

項目 取得内容
FriendlyName カメラ名
Status 接続状態

コマンドレット

# Camera クラスから取得
Get-PnpDevice -Class Camera | Where-Object { $_.Status -eq "OK" } | Select-Object FriendlyName

# Image クラスにカメラが登録されている場合
Get-PnpDevice -Class Image | Where-Object { $_.Status -eq "OK" } | Select-Object FriendlyName

出力結果

IR Camera
USB FHD Camera

10. 光学ドライブ情報

項目 取得内容
Name 光学ドライブ名

コマンドレット

Get-CimInstance -ClassName Win32_CDROMDrive | Select-Object Name

出力結果

ATAPI DVD A DH16AESH

補足: 光学ドライブが搭載されていない端末では、結果が空になります。


11. ネットワーク情報

項目 取得内容
Name アダプター名
MACAddress MACアドレス
SettingID 設定ID
Interface Ethernet / Wi-Fi / WWAN
IPAddress IPアドレス

コマンドレット

# 物理アダプター一覧
Get-CimInstance -ClassName Win32_NetworkAdapter -Filter "PhysicalAdapter=True" |
    Select-Object Name, MACAddress

# IPアドレス付き設定
Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration |
    Where-Object { $_.IPAddress } | Select-Object Description, IPAddress, SettingID

# より簡潔に(Get-NetAdapter)
Get-NetAdapter | Select-Object Name, InterfaceDescription, MacAddress, Status

出力結果

Name      : Intel(R) Wi-Fi 6E AX211 160MHz
MAC       : 00-11-22-33-44-55
SettingID  : {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
Interface : Wi-Fi
IpAddress : 192.168.1.100

補足: インターフェースタイプの判定は、アダプター名に含まれるキーワード(Wi-Fi, Wireless, WWAN, Cellular)で判別できます。


12. Bluetooth情報

項目 取得内容
FriendlyName Bluetoothデバイス名

コマンドレット

Get-PnpDevice -Class Bluetooth | Where-Object { $_.Status -eq "OK" } | Select-Object FriendlyName

出力結果

インテル(R) ワイヤレス Bluetooth(R)
Keyboard K380
OpenComm2 by Shokz

13. バッテリ情報

項目 取得内容
BatteryName バッテリ名
SerialNo 製造番号
Chemistry 素材
PowerState 電源状態
RemainingCapacity 残容量
FullChargedCapacity フル充電容量
Voltage 電圧
Temperature 温度
BatteryEstimatedTime 残り時間
BatteryManufactureName 製造者名
BatteryUniqueID ユニークID

コマンドレット

# 基本情報
Get-CimInstance -ClassName Win32_Battery | Format-List Name, BatteryStatus, Chemistry, DeviceID

# フル充電容量(ROOT\WMI)
Get-CimInstance -Namespace ROOT\WMI -ClassName BatteryFullChargedCapacity

# バッテリステータス(ROOT\WMI)
Get-CimInstance -Namespace ROOT\WMI -ClassName BatteryStatus

# バッテリ温度(ROOT\WMI)※端末によっては取得不可
Get-CimInstance -Namespace ROOT\WMI -ClassName BatteryTemperature

# バッテリ静的データ(ROOT\WMI)※端末によっては取得不可
Get-CimInstance -Namespace ROOT\WMI -ClassName BatteryStaticData

出力結果例

BatteryName          : XX-XXXXXX
SerialNo             : XXXXXXXXXXX
Chemistry            : LION
PowerState           : Charging
RemainingCapacity    : 55240 mWh
FullChargedCapacity  : 55300 mWh
Voltage              : 13056 mV
Temperature          : N/A
BatteryEstimatedTime : Unknown
BatteryInformation   : 0x80000000
ManufactureDate      : 0/00/00
ManufactureName      : XXXXXXXX
BatteryUniqueID      : XXXXXXXXXXXXXXXXXXXXXXXXx

⚠️ 重要: PowerShell(WMI)だけでは取得できない項目があります。

項目 WMIで取得 備考
BatteryName Win32_Battery.Name
FullChargedCapacity BatteryFullChargedCapacity (ROOT\WMI)
RemainingCapacity (mWh) IOCTL API が必要
Voltage (mV) IOCTL API が必要
Temperature ハードウェア依存 + IOCTL API
ManufactureName IOCTL API が必要
SerialNumber IOCTL API が必要

詳細なバッテリー情報が必要な場合は、C# で Win32 API (DeviceIoControl + IOCTL_BATTERY_QUERY_INFORMATION) を使う必要があります。

また、powercfg /batteryreport コマンドでバッテリーの劣化状況をHTML形式で確認できます。


14. ストレージ情報

項目 取得内容
Model ドライブ名
Size 容量
SerialNumber シリアル番号

コマンドレット

Get-CimInstance -ClassName Win32_DiskDrive |
    Select-Object Model, @{N='CapacityGB';E={[math]::Round($_.Size/1GB,1)}}, SerialNumber

出力結果

Model      : SAMSUNG MZVL8256HEJD-00XXX
CapacityGB : 238.5
Serial     : XXXX_XXXX_XXXX_XXXX

15. プログラム情報(Programs)

レジストリの Uninstall 情報から、インストール済みプログラムを取得できます。

分類の定義、本ページではPublisherでProgram1・2と分類します:

  • Programs1: Publisher が Microsoft を含む、または DisplayName が Microsoft / MSDN / Windows のいずれかを含む
  • Programs2: 上記以外のプログラム
項目 取得内容
Name プログラム名
Version バージョン
DeveloperName デベロッパ名
InstalledAt インストール日

コマンドレット

# 64bit / 32bit 両方のレジストリから取得
$uninstall64 = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*" -ErrorAction SilentlyContinue |
    Where-Object { $_.DisplayName }
$uninstall32 = Get-ItemProperty "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" -ErrorAction SilentlyContinue |
    Where-Object { $_.DisplayName }

$all = $uninstall64 + $uninstall32

# Programs1: Microsoft関連
$programs1 = $all | Where-Object {
    $_.Publisher -like "*Microsoft*" -or
    $_.DisplayName -like "*Microsoft*" -or
    $_.DisplayName -like "*MSDN*" -or
    $_.DisplayName -like "*Windows*"
}

# Programs2: それ以外
$programs2 = $all | Where-Object {
    -not (
        $_.Publisher -like "*Microsoft*" -or
        $_.DisplayName -like "*Microsoft*" -or
        $_.DisplayName -like "*MSDN*" -or
        $_.DisplayName -like "*Windows*"
    )
}

# 表示(InstallDate を yyyy-MM-dd 形式に変換)
$programs1 | Select-Object @{N='Name';E={$_.DisplayName}},
    @{N='Version';E={$_.DisplayVersion}},
    @{N='DeveloperName';E={$_.Publisher}},
    @{N='InstalledAt';E={
        if ($_.InstallDate -match '^\d{8}$') {
            "$($_.InstallDate.Substring(0,4))-$($_.InstallDate.Substring(4,2))-$($_.InstallDate.Substring(6,2))"
        } else { $_.InstallDate }
    }}

$programs2 | Select-Object @{N='Name';E={$_.DisplayName}},
    @{N='Version';E={$_.DisplayVersion}},
    @{N='DeveloperName';E={$_.Publisher}},
    @{N='InstalledAt';E={
        if ($_.InstallDate -match '^\d{8}$') {
            "$($_.InstallDate.Substring(0,4))-$($_.InstallDate.Substring(4,2))-$($_.InstallDate.Substring(6,2))"
        } else { $_.InstallDate }
    }}

出力結果

Programs1(Microsoft関連)サンプル:

Name          : Microsoft Visual C++ 2015-2022 Redistributable (x64)
Version       : 14.38.33130
DeveloperName : Microsoft Corporation
InstalledAt   : 2024-10-01

Programs2(その他)サンプル:

Name          : Git
Version       : 2.49.0
DeveloperName : The Git Development Community
InstalledAt   : 2025-04-03

補足:

  • InstallDate はレジストリ上で yyyyMMdd 形式(例: 20250403)で格納されています。表示時に yyyy-MM-dd に変換しています
  • 一部のプログラムは InstallDatePublisher が空の場合があります
  • 64bit アプリは HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall に、32bit アプリは HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall に登録されます

16. まとめてスクリプトで収集する

PowerShell を使うと、上記の情報をまとめて1つのスクリプトで取得できます。

# 例: PC基本情報をまとめて取得
$pc = Get-CimInstance Win32_ComputerSystem
$bios = Get-CimInstance Win32_BIOS
$os = Get-CimInstance Win32_OperatingSystem
$cpu = Get-CimInstance Win32_Processor

[PSCustomObject]@{
    Manufacturer = $pc.Manufacturer
    Model        = $pc.SystemSKUNumber
    Serial       = $bios.SerialNumber
    OS           = $os.Caption
    CPU          = $cpu.Name
    MemoryGB     = [math]::Round($pc.TotalPhysicalMemory/1GB, 1)
}

業務で使う場合は、以下のような分類で整理すると見返しやすくなります:

  • PC / Motherboard / BIOS
  • Windows / Processor / Memory
  • Monitor / GPU / Camera
  • OpticalDrive / Storage
  • Network / Bluetooth
  • Battery

17. 注意点

  • WMIC は非推奨 です。今後は Get-CimInstanceGet-PnpDevice を使いましょう
  • バッテリ情報 は、WMIだけでは取れない項目があるため、powercfg /batteryreport や C# の Win32 API で補完する場面があります
  • 項目によっては 端末やメーカー依存 で、空欄やダミー値になることがあります
  • 管理者権限 が必要なコマンドもあります(特に ROOT\WMI 名前空間へのアクセス)


18. よく使うコマンドレット一覧

コマンドレット 用途
Get-CimInstance WMIクラスからハードウェア/OS情報を取得
Get-PnpDevice Plug and Play デバイス情報を取得
Get-NetAdapter ネットワークアダプター情報を取得
Get-ItemProperty レジストリから値を取得
powercfg /batteryreport バッテリーレポートをHTML出力

参考リンク


注意事項
本ブログに掲載している内容は、私個人の見解であり、所属する組織の立場や戦略、意見を代表するものではありません。あくまでエンジニアとしての経験や考えを発信していますので、ご了承ください。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?