PowerShellとWMIを使ってCPUやメモリ、ディスク、BIOSなどの情報を取得する方法
本エントリーの目次
PowerShellを使って、コンピューターの各種情報を取得したい!
PowerShellを使って複数のPCの運用管理をしている場合、コンピューター名やOSのビット数(32ビット / 64ビット)、適用済みの更新プログラムの状況などに応じて、メンテナンス内容を切り替えて実行したい!
 というケースは少なくありません。
このブログでは、以前にコンピューター名やOSのビット数、適用済みの更新プログラムの状況などの情報を、PowerShellを使って取得する方法をご紹介しています。
参考:
 PowerShellを使ってコンピューター名やOSのバージョン、ビットなどの情報を取得する方法
 PowerShellを使って適用済みの更新プログラムの一覧(Windows UpdateのKB番号)を取得する方法
ですがこれらの方法で取得できる情報では足りず、より詳細なコンピューターに関する情報。
 たとえばCPUやメモリ、物理・論理ディスク、BIOS、ネットワークアダプターに関する詳細な情報などを取得したい場合もあるでしょう。
そこで今回は、PowerShellを使ってコンピューターに関する詳細な各種情報を取得する方法をご紹介します!
PowerShellを使ってコンピューターに関する詳細な各種情報を取得する場合は、WMIの機能を利用する!
PowerShellを使ってコンピューターに関する詳細な各種情報を取得する際は、Windows OSに標準搭載されているWMIという機能を利用します。
WMI(Windows Management Instrumentation)は、Windows OSが搭載されているコンピューターのシステム構成要素について、情報収集を行う管理機能です。
WMIはWindows 2000時代からWindowsに標準搭載されている機能であり、現在広く利用されているであろうWindows 10やWindows 8.1、Windows Server 2019 / 2016、Windows Server 2012 R2世代のWindows OSであれば、機能のインストール作業などは不要です。
PowerShellでWMIの機能を利用して結果物を取得したいときは、『Get-WmiObject』コマンドレットを使用する!
PowerShellでは、WMIの機能を呼び出して結果を取得する『Get-WmiObject』というコマンドレットが用意されており、これを使ってコンピューターの各種詳細情報を取得します。
『Get-WmiObject』コマンドレットは、『Get-WmiObject WMIクラス』という構文でコマンドを実行することで、結果物を取得します。
WMIクラスとは、WMIの機能を呼び出して結果物を取得する際、取得対象の結果物を指定するための識別子のようなものと考えてください。
すべての情報を取得したいときは、明示的にすべてのプロパティ情報を取得するよう指定する!
PowerShellで『Get-WmiObject WMIクラス』という構文のコマンドを実行してコンピューターに関する詳細情報を取得した際、結果物のすべての情報が取得されず、一部の結果のみ標準出力されてしまうことがあります。
そのため『Get-WmiObject』コマンドレットを使って、すべての詳細な情報を取得したいときは、『Get-WmiObject WMIクラス | Format-List -Property *』という構文でコマンドを実行してください。
※指定したWMIクラスによっては、『Get-WmiObject WMIクラス』構文と『Get-WmiObject WMIクラス | Format-List -Property *』構文を使ったコマンドの実行結果が、ほとんど同一である場合もあります。
PowerShellとWMIの機能を使って、代表的なコンピューターの情報を取得する方法
参考までに、PowerShellとWMIの機能を使って、代表的なコンピューターの情報を取得する方法について、いくつかご紹介しましょう。
BIOSの詳細な情報を取得する方法
BIOSの詳細な情報を取得する際は、WMIクラスの『Win32_BIOS』を指定します。
1 2 3  | Get-WmiObject Win32_BIOS #より多くの詳細情報を取得したいとき Get-WmiObject Win32_BIOS | Format-List -Property *  | 
上記コマンドを実行すると、以下のような結果物を取得できます。
1 2 3 4 5 6 7 8 9 10 11 12  | PS C:\> Get-WmiObject Win32_BIOS SMBIOSBIOSVersion : Hyper-V UEFI Release v4.0 Manufacturer      : Microsoft Corporation Name              : Hyper-V UEFI Release v4.0 SerialNumber      : XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XX Version           : VRTUAL - 1 PS C:\>  | 
CPUの詳細な情報を取得する方法
CPUの詳細な情報を取得する際は、WMIクラスの『Win32_Processor』を指定します。
1 2 3  | Get-WmiObject Win32_Processor #より多くの詳細情報を取得したいとき Get-WmiObject Win32_Processor | Format-List -Property *  | 
上記コマンドを実行すると、以下のような結果物を取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 13  | PS C:\> Get-WmiObject Win32_Processor Caption           : Intel64 Family 6 Model 85 Stepping 7 DeviceID          : CPU0 Manufacturer      : GenuineIntel MaxClockSpeed     : 2095 Name              : Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz SocketDesignation : None PS C:\>  | 
物理メモリの詳細な情報を取得する方法
物理メモリの詳細な情報を取得する際は、WMIクラスの『Win32_PhysicalMemory』を指定します。
1 2 3  | Get-WmiObject Win32_PhysicalMemory #より多くの詳細情報を取得したいとき Get-WmiObject Win32_PhysicalMemory | Format-List -Property *  | 
上記コマンドを実行すると、以下のような結果物を取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18  | PS C:\> Get-WmiObject Win32_PhysicalMemory __GENUS              : 2 __CLASS              : Win32_PhysicalMemory __SUPERCLASS         : CIM_PhysicalMemory __DYNASTY            : CIM_ManagedSystemElement 中略 Capacity             : 4160749568 Caption              : 物理メモリ 中略 Version              : PSComputerName       : WIN10TESTPC PS C:\>  | 
プロセスの詳細な情報を取得する方法
プロセスの詳細な情報を取得する際は、WMIクラスの『Win32_Process』を指定します。
1 2 3  | Get-WmiObject Win32_Process #より多くの詳細情報を取得したいとき Get-WmiObject Win32_Process | Format-List -Property *  | 
上記コマンドを実行すると、以下のような結果物を取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18  | PS C:\> Get-WmiObject Win32_Process __GENUS                    : 2 __CLASS                    : Win32_Process __SUPERCLASS               : CIM_Process __DYNASTY                  : CIM_ManagedSystemElement 中略 Caption                    : EXCEL.EXE 中略 Path                       : C:\WINDOWS\system32\conhost.exe PS C:\>  | 
物理ディスクの詳細な情報を取得する方法
物理ディスクの詳細な情報を取得する際は、WMIクラスの『Win32_DiskDrive』を指定します。
1 2 3  | Get-WmiObject Win32_DiskDrive #より多くの詳細情報を取得したいとき Get-WmiObject Win32_DiskDrive | Format-List -Property *  | 
上記コマンドを実行すると、以下のような結果物を取得できます。
1 2 3 4 5 6 7 8 9 10 11 12  | PS C:\> Get-WmiObject Win32_DiskDrive Partitions : 4 DeviceID   : \\.\PHYSICALDRIVE0 Model      : Microsoft 仮想ディスク Size       : 322118415360 Caption    : Microsoft 仮想ディスク PS C:\>  | 
論理ディスクの詳細な情報を取得する方法
論理ディスクの詳細な情報を取得する際は、WMIクラスの『Win32_LogicalDisk』を指定します。
1 2 3  | Get-WmiObject Win32_LogicalDisk #より多くの詳細情報を取得したいとき Get-WmiObject Win32_LogicalDisk | Format-List -Property *  | 
上記コマンドを実行すると、以下のような結果物を取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 13  | PS C:\> Get-WmiObject Win32_LogicalDisk DeviceID     : C: DriveType    : 3 ProviderName : FreeSpace    : 301189718016 Size         : 320524300288 VolumeName   : PS C:\>  | 
その他使用頻度が高いと思われるWMIクラスについて
すでにご紹介した『Win32_Processor』や『Win32_PhysicalMemory』WMIクラスの他に、使用頻度が高いと思われるWMIクラスについても列挙、ご紹介しておきましょう。
- Win32_NTLogEvent
 - Win32_OperatingSystem
 - Win32_Printer
 - Win32_ComputerSystem
 - Win32_NetworkAdapter
 - Win32_Service
 - Win32_UserAccount
 - Win32_Product
 - Win32_ComputerSystemProduct
 
『Get-WmiObject』コマンドレットで使用可能なWMIクラスの一覧を取得する方法
ここまでにご紹介したとおり、『Get-WmiObject』コマンドレットを使うことで、コンピューターに関するさまざまな情報を取得できます。
 そしてコマンドを実行する際に重要なのが、指定するWMIクラスです。
そこで最後に、コンピューターで利用できるWMIクラスの一覧を取得する方法をご紹介しましょう。
コンピューターで利用できるWMIクラスの一覧を取得したいときは、『(Get-WmiObject -class meta_class).Name』※、または『(Get-WmiObject -List).Name』などのコマンドを実行してください。
 コマンドを実行することで、利用可能なWMIクラスの一覧を取得できます。
※-classを省略し、『(Get-WmiObject meta_class).Name』と指定することでも一覧を取得可能です。
結果一覧をソートした状態で取得したいときは、『(Get-WmiObject -class meta_class).Name | sort』というコマンドを実行してください。
1 2 3 4 5 6 7 8 9 10 11  | PS C:\> (Get-WmiObject -class meta_class).Name | sort __AbsoluteTimerInstruction __ACE __AggregateEvent __ClassCreationEvent __ClassDeletionEvent 中略 Win32_WMISetting PS C:\>  | 
そして表示・取得されたWMIクラスの一覧から、対象の情報を取得できそうなWMIクラスを探し、『Get-WmiObject』コマンドレットと組み合わせて使用すると良いでしょう。
以上、参考になさってくださーい!
