WMI タスク: コンピューター ハードウェア

ハードウェア コンポーネントの存在、状態、またはプロパティに関する情報をコンピューター ハードウェアで取得するための WMI タスク。 たとえば、コンピューターがデスクトップかノート PC かを判断できます。 その他の例については、https://www.microsoft.com/technet の TechNet ScriptCenter を参照してください。

このトピックに示したスクリプト例では、ローカル コンピューターからのみデータを取得します。 スクリプトを使用してリモート コンピューターからデータを取得する方法の詳細については、「リモート コンピューター上の WMI への接続」を参照してください。

スクリプトを実行するには

以下の手順では、スクリプトの実行方法を説明します。

  1. コードをコピーし、それを、拡張子 .vbs を付けたファイル ("filename.vbs" など) に保存します。 テキスト エディターによってファイルに .txt 拡張子が追加されていないことを確認します。
  2. コマンド プロンプト ウィンドウを開き、ファイルを保存したディレクトリに移動します。
  3. コマンド プロンプトで「cscript filename.vbs」と入力します。
  4. イベント ログにアクセスできない場合は、管理者特権でのコマンド プロンプトから実行しているかどうかを確認します。 セキュリティ イベント ログなどの一部のイベント ログは、ユーザー アクセス制御 (UAC) によって保護されている場合があります。

注意

既定では、cscript により、コマンド プロンプト ウィンドウにスクリプトの出力が表示されます。 WMI スクリプトでは大量の出力が生成される可能性があるため、出力をファイルにリダイレクトすることが必要になる場合があります。 コマンド プロンプトで「cscript filename.vbs > outfile.txt」と入力し、filename.vbs スクリプトの出力を outfile.txt にリダイレクトします。

次の表に、ローカル コンピューターからさまざまな種類のデータを取得するために使用できるスクリプトの例の一覧を示します。

操作方法 WMI のクラスまたはメソッド
コンピューターに搭載されている空きメモリの量を確認する クラス Win32_OperatingSystemFreePhysicalMemory プロパティを使用します。
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colSettings 
    Wscript.Echo "Available Physical Memory: " & objOperatingSystem.FreePhysicalMemory
Next
PowerShell
$mem = Get-WmiObject -Class Win32_OperatingSystem
"System : {0}" -f $mem.csname
"Free Memory: {0}" -f $mem.FreePhysicalMemory
コンピューターに DVD ドライブが搭載されているかどうかを確認する

Win32_CDROMDrive クラスを使用して、Name または DeviceID プロパティに頭字語 DVD があるかどうかを確認します。

VB
strComputer = "."
Set objWMIService = GetObject( "winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_CDROMDrive")
For Each objItem in colItems
    Wscript.Echo "Device ID: " & objItem.DeviceID
    Wscript.Echo "Description: " & objItem.Description
    Wscript.Echo "Name: " & objItem.Name 
Next
PowerShell
$drives = Get-WmiObject -Class Win32_CDROMDrives
$drives | Format-Table DeviceID, Description, Name -autosize
コンピューターに搭載されている RAM の量を確認する

Win32_ComputerSystem クラスを使用し、TotalPhysicalMemory プロパティの値を確認します。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objComputer in colSettings 
    Wscript.Echo "System Name: " & objComputer.Name
    Wscript.Echo "Total Physical Memory: " & objComputer.TotalPhysicalMemory
Next
PowerShell
$mem = Get-WmiObject -Class Win32_ComputerSystem
コンピューターに複数のプロセッサが搭載されているかどうかを確認する

Win32_ComputerSystem クラスと NumberOfProcessors プロパティを使用します。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objComputer in colSettings 
    Wscript.Echo "System Name: " & objComputer.Name
    Wscript.Echo "Number of Processors: " & objComputer.NumberOfProcessors
Next
PowerShell
"System Name : {0}" -f $system.Name
"Number of Processors: {0}" -f $system.NumberOfProcessors
コンピューターに PCMCIA スロットがあるかどうかを確認する

Win32_PCMCIAController クラスを使用し、Count プロパティの値を確認します。 Count が 0 の場合、コンピューターには PCMCIA スロットがありません。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_PCMCIAController")
Wscript.Echo "Number of PCMCIA slots: " & colItems.Count

PowerShell
$Pcmcia = Get-WmiObject -Class Win32_PCMCIAController 

if (!$pcmcia.count) { "Number of PCMCIA Slots: {0}" -f 1 }else { "Number of PCMCIA Slots: {0}" -f $pcmcia.count }

動作していないデバイス (デバイス マネージャーで感嘆符アイコンでマークされているもの) を特定する

Win32_PnPEntity クラスを使用し、WQL クエリで次の句を使用します。 WHERE ConfigManagerErrorCode <> 0 このコードでは、ドライバーが見つからない USB デバイスが検出されない場合があることに注意してください。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_PnPEntity WHERE ConfigManagerErrorCode <> 0")
For Each objItem in colItems
    Wscript.Echo "Class GUID: " & objItem.ClassGuid
    Wscript.Echo "Description: " & objItem.Description
    Wscript.Echo "Device ID: " & objItem.DeviceID
    Wscript.Echo "Manufacturer: " & objItem.Manufacturer
    Wscript.Echo "Name: " & objItem.Name
    Wscript.Echo "PNP Device ID: " & objItem.PNPDeviceID
    Wscript.Echo "Service: " & objItem.Service
Next
PowerShell
$baddevices = Get-WmiObject Win32_PNPEntity | where {$_.ConfigManagerErrorcode -ne 0}
" Total Bad devices: {0}" -f $baddevices.count
foreach ($device in $baddevices) {
    "Name : {0}" -f $device.name
    "Class Guid : {0}" -f $device.Classguid
    "Description : {0}" -f $device.Description
    "Device ID : {0}" -f $device.deviceid
    "Manufacturer : {0}" -f $device.manufactuer
    "PNP Devcice Id : {0}" -f $device.PNPDeviceID
    "Service Name : {0}" -f $device.service
    ""
}
コンピューター上で使用されるマウスのプロパティを確認する

Win32_PointingDevice クラスを使用します。 これにより、マウス デバイスだけでなく、すべてのポインティング デバイスのプロパティが返されます。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_PointingDevice")
For Each objItem in colItems
    Wscript.Echo "Description: " & objItem.Description
    Wscript.Echo "Device ID: " & objItem.DeviceID
    Wscript.Echo "Device Interface: " & objItem.DeviceInterface
    Wscript.Echo "Double Speed Threshold: " & objItem.DoubleSpeedThreshold
    Wscript.Echo "Handedness: " & objItem.Handedness
    Wscript.Echo "Hardware Type: " & objItem.HardwareType
    Wscript.Echo "INF File Name: " & objItem.InfFileName
    Wscript.Echo "INF Section: " & objItem.InfSection
    Wscript.Echo "Manufacturer: " & objItem.Manufacturer
    Wscript.Echo "Name: " & objItem.Name
    Wscript.Echo "Number Of Buttons: " & objItem.NumberOfButtons
    Wscript.Echo "PNP Device ID: " & objItem.PNPDeviceID
    Wscript.Echo "Pointing Type: " & objItem.PointingType
    Wscript.Echo "Quad Speed Threshold: " & objItem.QuadSpeedThreshold
    Wscript.Echo "Resolution: " & objItem.Resolution
    Wscript.Echo "Sample Rate: " & objItem.SampleRate
    Wscript.Echo "Synch: " & objItem.Synch
Next

PowerShell
# Get Mouse information 

$mouse = Get-WmiObject -Class Win32_PointingDevice

<# Decode detalis #>

function Deviceinterface { param ($value) switch ($value) { 0 {"Other"} 1 {"Unknown"} 3 {"Serial"} 4 {"PS/2"} 5 {"Infrared"} 6 {"HP-HIL"} 7 {"Bus Mouse"} 8 {"ADP (Apple Desktop Bus)"} 160 {"Bus Mouse DB-9"} 161 {"Bus Mouse Micro-DIN"} 162 {"USB"} } }

function Handedness { param ($value) switch ($value) { 0 {"Unknown"} 1 {"Not Applicable"} 2 {"Right-Handed Operation"} 3 {"Left-Handed Operation"} } }

function Pointingtype {

param ($value) switch ($value) { 1 {"Other"} 2 {"Unknown"} 3 {"Mouse"} 4 {"Track Ball"} 5 {"Track Point"} 6 {"Glide Point"} 7 {"Touch Pad"} 8 {"Touch Screen"} 9 {"Mouse - Optical Sensor"} } }

<# Display details #>

"Mouse Information on System: {0}" -f $mouse.systemname "Description : {0}" -f $mouse.Description "Device ID : {0}" -f $mouse.DeviceID "Device Interface : {0}" -f (Deviceinterface($mouse.DeviceInterface)) "Double Speed Threshold : {0}" -f $mouse.DoubleSpeedThreshold "Handedness : {0}" -f (Handedness($mouse.handedness)) "Hardware Type : {0}" -f $mouse.Hardwaretype "INF FIle Name : {0}" -f $mouse.InfFileName "Inf Section : {0}" -f $mouse.InfSection "Manufacturer : {0}" -f $mouse.Manufacturer "Name : {0}" -f $mouse.Name "Number of buttons : {0}" -f $mouse.NumberOfButtons "PNP Device ID : {0}" -f $mouse.PNPDeviceID "Pointing Type : {0}" -f (Pointingtype ($mouse.PointingType)) "Quad Speed Threshold : {0}" -f $mouse.QuadSpeedThreshold "Resolution : {0}" -f $mouse.Resolution "Sample Rate : {0}" -f $mouse.SampleRate "Synch : {0}" -f $mouse.Synch

コンピューターに搭載されているプロセッサの速度を確認する

Win32_Processor クラスを使用し、MaxClockSpeed プロパティの値を確認します。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
For Each objItem in colItems
    Wscript.Echo "Processor Id: " & objItem.ProcessorId
    Wscript.Echo "Maximum Clock Speed: " & objItem.MaxClockSpeed
Next
コンピューターがタワーか、ミニタワーか、ラップトップかなどを確認する

Win32_SystemEnclosure クラスを使用し、ChassisType プロパティの値を確認します。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colChassis = objWMIService.ExecQuery("Select * from Win32_SystemEnclosure")
For Each objChassis in colChassis
    For Each objItem in objChassis.ChassisTypes
        Wscript.Echo "Chassis Type: " & objItem
    Next
Next
PowerShell
$processors = Get-WmiObject -Class Win32_Processor
foreach ($proc in $processors)
{
    "Processor ID: " + $proc.ProcessorID
    "Maximum Clock Speed: " + $proc.MaxClockSpeed
}
コンピューターのシリアル番号と資産タグを取得する

Win32_SystemEnclosure クラスと、プロパティ SerialNumber および SMBIOSAssetTag を使用します。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSMBIOS = objWMIService.ExecQuery("Select * from Win32_SystemEnclosure")
For Each objSMBIOS in colSMBIOS
    Wscript.Echo "Part Number: " & objSMBIOS.PartNumber
    Wscript.Echo "Serial Number: " & objSMBIOS.SerialNumber
    Wscript.Echo "Asset Tag: " & objSMBIOS.SMBIOSAssetTag
Next

PowerShell
$colSMBIOS = Get-WmiObject -Class Win32_SystemEnclosure 

foreach ($objSMBIOS in $colSMBIOS) { "Part Number: " + $objSMBIOS.PartNumber "Serial Number: " + $objSMBIOS.SerialNumber "Asset Tag: " + $objSMBIOS.SMBIOSAssetTag }

USB ポートに接続されているデバイスの種類を確認する

Win32_USBHub クラスを使用し、Description プロパティを確認します。 このプロパティには、"大容量記憶装置" や "印刷サポート" などの値が含まれる場合があります。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_USBHub")
For Each objItem in colItems
    Wscript.Echo "Device ID: " & objItem.DeviceID
    Wscript.Echo "PNP Device ID: " & objItem.PNPDeviceID
    Wscript.Echo "Description: " & objItem.Description
    Wscript.Echo
Next

PowerShell
$colItems = Get-WmiObject -Class Win32_USBHub 

foreach ($objItem in $colItems) { "Device ID: " + $objItem.DeviceID "PNP Device ID: " + $objItem.PNPDeviceID "Description: " + $objItem.Description }

コンピューターに搭載されているテープ ドライブの数を確認する

Win32_TapeDrive クラスを使用し、SWbemObjectSet.Count メソッドを使用します。 Count = 0 の場合、コンピューターにテープ ドライブは搭載されていません。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_TapeDrive")
Wscript.Echo "Number of tape drives: " & colItems.Count

PowerShell
$colItems = Get-WmiObject -Class Win32_TapeDrive 

foreach ($objItem in $colItems) { "Number of Drives: " + $colItems.Count }

次の TechNet ギャラリーのコード例では、複数のマシンのすべてのドライブの空き領域を一覧表示する方法について説明します。

TechNet ギャラリーの Get-ComputerInfo - ローカル/リモート コンピューターからコンピューター情報のクエリを実行する - (WMI) に関する PowerShell サンプルでは、ハードウェアとソフトウェアへの多数の呼び出しを使用して、ローカルまたはリモート システムに関する情報を表示します。

TechNetGallery の PowerShell を使用したマルチスレッド システム資産の収集に関する PowerShell サンプルでは、WMI と PowerShell によるマルチスレッドを使用して役立つシステム情報を大量に収集します。

スクリプトおよびアプリケーション用の WMI タスク

WMI C++ アプリケーションの例

TechNet ScriptCenter