WMI オブジェクトの取得 (Get-WmiObject)

広範な情報を一貫した方法で公開する Windows Management Instrumentation (WMI) は、Windows システム管理の中核となるテクノロジです。WMI で実現できることの多さを考えると、WMI オブジェクトにアクセスするための Windows PowerShell コマンドレットである Get-WmiObject は、最も実用性に優れたコマンドレットの 1 つと言えます。ここでは、まず、Get-WmiObject を使って WMI オブジェクトにアクセスする方法について説明し、その後、WMI オブジェクトを使って特定の作業を行う方法について説明します。

WMI のクラスを一覧表示する

ほとんどの WMI ユーザーがまず遭遇する問題は、"WMI を使ってできること" をいかに知るかという点です。管理可能なリソースは、WMI の各クラスによって表されます。WMI のクラスは数百個に及び、その中には、数十個のプロパティが存在するものもあります。

Get-WmiObject では、WMI のクラスを検出できるようにすることによって、この問題を解決しています。ローカル コンピューターで利用可能な WMI のクラス一覧を取得するには、次のように入力します。

PS> Get-WmiObject -List


__SecurityRelatedClass                  __NTLMUser9X
__PARAMETERS                            __SystemSecurity
__NotifyStatus                          __ExtendedStatus
Win32_PrivilegesStatus                  Win32_TSNetworkAdapterSettingError
Win32_TSRemoteControlSettingError       Win32_TSEnvironmentSettingError
...

ComputerName パラメーターで、コンピューター名または IP アドレスを指定することにより、同じ情報をリモート コンピューターから取得できます。

PS> Get-WmiObject -List -ComputerName 192.168.1.29


__SystemClass                           __NAMESPACE
__Provider                              __Win32Provider
__ProviderRegistration                  __ObjectProviderRegistration
...

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

注意事項:

Get-WmiObject を使用してリモート コンピューターに接続する場合、接続先のリモート コンピューターで WMI が実行されていること、および、(既定の構成の場合) 自分の使用しているアカウントがリモート コンピューターのローカル管理者グループに属していることが必要です。リモート システムに Windows PowerShell がインストールされている必要はありません。したがって、WMI さえ使用できれば、Windows PowerShell が実行されていないオペレーティング システムでも管理できるようになります。

ローカル システムへの接続時に ComputerName を指定することもできます。コンピューター名として使用できるのは、ローカル コンピューターの名前、コンピューターの IP アドレス (ループバック アドレス 127.0.0.1)、または WMI 形式のコンピューター名 ('.') のいずれかです。Windows PowerShell を、名前と IP アドレスがそれぞれ Admin01 と 192.168.1.90 であるコンピューターで使用している場合、次のいずれかのコマンドを実行すると、そのコンピューターの WMI クラス一覧が返されます。

Get-WmiObject -List
Get-WmiObject -List -ComputerName .
Get-WmiObject -List -ComputerName Admin01
Get-WmiObject -List -ComputerName 192.168.1.90
Get-WmiObject -List -ComputerName 127.0.0.1
Get-WmiObject -List -ComputerName localhost

Get-WmiObject では、root/cimv2 名前空間が既定で使用されます。別の WMI 名前空間を指定する場合は、Namespace パラメーターを使用し、対応する名前空間パスを指定します。

PS> Get-WmiObject -List -ComputerName 192.168.1.29 -Namespace root


__SystemClass                           __NAMESPACE
__Provider                              __Win32Provider
...

WMI クラスの詳細情報を表示する

WMI クラスの名前が既にわかっている場合は、その名前を使って直ちに情報を取得できます。たとえば、コンピューターの情報を取得する場合、Win32_OperatingSystem という WMI クラスがよく使用されます。

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName .


SystemDirectory : C:\WINDOWS\system32
Organization    : Global Network Solutions
BuildNumber     : 2600
RegisteredUser  : Oliver W. Jones
SerialNumber    : 12345-678-9012345-67890
Version         : 5.1.2600

ここではすべてのパラメーターが入力されていますが、このコマンドはより簡潔に表記できます。ローカル システムに接続する場合、ComputerName パラメーターは必ずしも必要ではありません。ここでは、説明に汎用性を持たせることと、パラメーターの存在を明らかにするために、パラメーター名を省略せずに入力しています。Namespace も、既定値が root/cimv2 であるため省略できます。また、ほとんどのコマンドレットでは、共通パラメーターの名前を省略できます。Get-WmiObject では、第 1 パラメーターの名前を指定しなかった場合、自動的に Class パラメーターとして処理されます。したがって、前述のコマンドは、次のように入力することもできます。

Get-WmiObject Win32_OperatingSystem

Win32_OperatingSystem クラスには、ここに表示されているよりも多くのプロパティが存在します。Get-Member を使用すると、すべてのプロパティを確認できます。WMI クラスのうち、このように非表示にされているプロパティは、他のオブジェクトのプロパティと同様、通常どおりに使用できます。

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Get-Member -MemberType Property


   TypeName: System.Management.ManagementObject#root\cimv2\Win32_OperatingSyste
m

Name                                      MemberType Definition
----                                      ---------- ----------
__CLASS                                   Property   System.String __CLASS {...
...
BootDevice                                Property   System.String BootDevic...
BuildNumber                               Property   System.String BuildNumb...
...

Format 系のコマンドレットで既定以外のプロパティを表示する

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

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-Table -Property TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles

TotalVirtualMemorySize TotalVisibleMem FreePhysicalMem FreeVirtualMemo FreeSpaceInPagi
                              ory              ry         ngFiles
--------------- --------------- --------------- --------------- ---------------
        2097024          785904          305808         2056724         1558232
注意事項:

Format-Table のプロパティ名にはワイルドカードを使用できます。そのため、最後に指定したパイプライン要素は「Format-Table -Property TotalV*,Free*」のように簡潔に記述することもできます。

次のように、リスト形式で表示すると、メモリに関するデータがより見やすくなります。

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-List TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles


TotalVirtualMemorySize : 2097024
TotalVisibleMemorySize : 785904
FreePhysicalMemory     : 301876
FreeVirtualMemory      : 2056724
FreeSpaceInPagingFiles : 1556644




目次