Get-CimInstance を使った WMI オブジェクトの取得

このサンプルは Windows プラットフォームにのみ適用されます。

Windows Management Instrumentation (WMI) は、Windows システム管理のための中核となるテクノロジであり、幅広い種類の情報を一貫した方法で公開します。 WMI によって可能になるタスクが非常に多いことから、WMI オブジェクトにアクセスするための PowerShell コマンドレットである Get-CimInstance は、実際の作業を行うための最も便利なコマンドレットの 1 つと言えます。 ここでは、CIM コマンドレットを使って WMI オブジェクトにアクセスする方法と、WMI オブジェクトを使って特定の作業を行う方法について説明します。

WMI クラスの一覧表示

WMI のほとんどのユーザーが直面する最初の問題は、WMI で何ができるかを調べることです。 WMI クラスは、管理できるリソースを記述しています。 何百もの WMI クラスがあり、その中には数十個のプロパティを持つクラスもあります。

この問題に対処するため、Get-CimClass では WMI を探索可能にしました。 ローカル コンピューター上で使える WMI クラスの一覧を取得するには、次のように入力します。

Get-CimClass -Namespace root/CIMV2 | 
    Where-Object CimClassName -like Win32* | 
    Select-Object CimClassName
CimClassName
------------
Win32_DeviceChangeEvent
Win32_SystemConfigurationChangeEvent
Win32_VolumeChangeEvent
Win32_SystemTrace
Win32_ProcessTrace
Win32_ProcessStartTrace
Win32_ProcessStopTrace
Win32_ThreadTrace
Win32_ThreadStartTrace
Win32_ThreadStopTrace
...

同じ情報をリモート コンピューターから取得するには、次のように、ComputerName パラメーターにコンピューター名や IP アドレスを指定します。

Get-CimClass -Namespace root/CIMV2 -ComputerName 192.168.1.29

リモート コンピューターから返されるクラスの一覧は、コンピューターが実行されている特定のオペレーティング システムと、インストールされているアプリケーションによって特定の WMI 拡張機能が追加されるため、異なる場合があります。

Note

CIM コマンドレットを使用してリモート コンピューターに接続する場合、リモート コンピューターは WMI を実行している必要があり、使用しているアカウントはリモート コンピューターのローカル Administrators グループに存在する必要があります。 リモート システムに PowerShell をインストールする必要はありません。 そのため、WMI が利用可能であれば、PowerShell を実行していないオペレーティング システムであっても管理できます。

WMI クラスの詳細表示

WMI クラスの名前がわかっている場合は、その名前を使って情報をすぐに取得できます。 たとえば、コンピューターに関する情報を取得するためによく使われる WMI クラスの 1 つに、Win32_OperatingSystem があります。

Get-CimInstance -Class Win32_OperatingSystem
SystemDirectory     Organization BuildNumber RegisteredUser SerialNumber            Version
---------------     ------------ ----------- -------------- ------------            -------
C:\WINDOWS\system32 Microsoft    22621       USER1          00330-80000-00000-AA175 10.0.22621

ここでは、すべてのパラメーターを示しましたが、このコマンドはもっと簡潔に表現できます。 ComputerName パラメーターは、ローカル システムに接続するときには必要ありません。 最も一般的なケースを示し、このパラメーターを思い出してもらうために使いました。 Namespace の既定値は root/CIMV2 であるため、これも省略できます。 最後に、ほとんどのコマンドレットでは、共通のパラメーターの名前を省略できます。 Get-CimInstance の場合、最初のパラメーターで名前を指定しないと、PowerShell ではそれが Class パラメーターとして扱われます。 したがって、先ほどのコマンドは、次のように入力することもできました。

Get-CimInstance Win32_OperatingSystem

Win32_OperatingSystem クラスには、ここで紹介した以外にも多数のプロパティがあります。 Get-Member を使うと、すべてのプロパティを参照できます。 WMI クラスのプロパティは、他のオブジェクト プロパティと同じように自動的に取得できます。

Get-CimInstance -Class Win32_OperatingSystem | Get-Member -MemberType Property
   TypeName: Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_OperatingSystem
Name                                      MemberType Definition
----                                      ---------- ----------
BootDevice                                Property   string BootDevice {get;}
BuildNumber                               Property   string BuildNumber {get;}
BuildType                                 Property   string BuildType {get;}
Caption                                   Property   string Caption {get;}
CodeSet                                   Property   string CodeSet {get;}
CountryCode                               Property   string CountryCode {get;}
CreationClassName                         Property   string CreationClassName {get;}
CSCreationClassName                       Property   string CSCreationClassName {get;}
CSDVersion                                Property   string CSDVersion {get;}
CSName                                    Property   string CSName {get;}
CurrentTimeZone                           Property   int16 CurrentTimeZone {get;}
DataExecutionPrevention_32BitApplications Property   bool DataExecutionPrevention_32BitApplications {get;}
DataExecutionPrevention_Available         Property   bool DataExecutionPrevention_Available {get;}
...

Format コマンドレットを使った既定以外のプロパティの表示

Win32_OperatingSystem クラスに含まれている情報のうち、既定では表示されない情報を表示するには、Format コマンドレットを使います。 たとえば、利用可能なメモリのデータを表示するには、次のように入力します。

Get-CimInstance -Class Win32_OperatingSystem | Format-Table -Property TotalVirtualMemorySize, TotalVisibleMemorySize, FreePhysicalMemory, FreeVirtualMemory, FreeSpaceInPagingFiles
TotalVirtualMemorySize TotalVisibleMemorySize FreePhysicalMemory FreeVirtualMemory FreeSpaceInPagingFiles
---------------------- ---------------------- ------------------ ----------------- ----------------------
              41787920               16622096            9537952          33071884               25056628

注意

Format-Table のプロパティ名にはワイルドカードを指定できるので、最後のパイプライン要素は Format-Table -Property Total*Memory*, Free* のように省略できます

メモリのデータは、次のように入力して一覧の形式にすると、さらに読みやすくなります。

Get-CimInstance -Class Win32_OperatingSystem | Format-List Total*Memory*, Free*
TotalVirtualMemorySize : 41787920
TotalVisibleMemorySize : 16622096
FreePhysicalMemory     : 9365296
FreeSpaceInPagingFiles : 25042952
FreeVirtualMemory      : 33013484
Name                   : Microsoft Windows 11 Pro|C:\Windows|\Device\Harddisk0\Partition2