はじめに
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...}
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_OperatingSystemのCaptionでもエディション名は取れますが、レジストリの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
補足:
L2CacheSizeとL3CacheSizeの単位は 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)
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.NameFullChargedCapacity ✅ 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に変換しています- 一部のプログラムは
InstallDateやPublisherが空の場合があります- 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-CimInstanceやGet-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出力 |
参考リンク
- Win32_ComputerSystem - Microsoft Learn
- Win32_BIOS - Microsoft Learn
- Win32_Processor - Microsoft Learn
- Win32_PhysicalMemory - Microsoft Learn
- Win32_VideoController - Microsoft Learn
- Win32_NetworkAdapter - Microsoft Learn
- Win32_Battery - Microsoft Learn
- Win32_DiskDrive - Microsoft Learn
- WmiMonitorID - Microsoft Learn
- Battery Information (IOCTL) - Microsoft Learn
注意事項
本ブログに掲載している内容は、私個人の見解であり、所属する組織の立場や戦略、意見を代表するものではありません。あくまでエンジニアとしての経験や考えを発信していますので、ご了承ください。