Get-WMiObject コマンドレットの使用

WMI を使用したデータの取得

現時点で、システム管理タスクを実行するように設計されているコマンドレットは少ししかありません (Get-ProcessGet-ServiceGet-EventLog)。そのため、WMI は依然としてシステム管理の主要な自動化テクノロジであり、システム管理者は日常の管理タスクを行うために Get-WmiObject を多用することになります。

また、おまけもあります。他のほとんどのコマンドレットとは異なり、Get-WmiObject はリモート コンピュータに対しても実行できます。つまり、Windows PowerShell をより実用的な管理ツールとして使用できるということです。

既定で、Get-WmiObject はローカル コンピュータにある root\cimv2 名前空間にバインドします。また、cimv2 にある任意のクラスに関してプロパティ値を簡単に返すことができます。たとえば、Win32_BIOS クラスの情報が必要だとします。この場合、次のように指定します。

Get-WmiObject win32_bios

Get-WmiObject に続けてクラス名を指定するとします。ただし、そのクラスはリモート コンピュータにあるとします。問題ありません。-computername に、おわかりですね、リモート コンピュータ名 (atl-fs-01) を続けるだけです。

Get-WmiObject win32_bios -computername atl-fs-01

まだ納得しませんか。よい指摘です。既定では、Get-WmiObject は root\cimv2 名前空間に接続すると説明しました。異なる名前空間にあるクラスに接続する方法はあるでしょうか。当然ながらあります。-namespace パラメータに完全な名前空間パス (たとえば ccm だけでなく root\ccm) を続けます。たとえば、次のコマンドは、root\ccm 名前空間にある SMS_Client クラスから情報を返します。

Get-WmiObject -namespace root\ccm -class sms_client -computername atl-fs-01

他のコマンドレットを Get-WmiObject と連携して使用できると言わずに済ます必要があります (たとえ言ったように見えても)。たとえば、次のコマンドは、リモート コンピュータ atl-fs-01 にある CCM_InstalledComponent クラスから情報を取得します。次に、データを Select-Object にパイプ処理します。それによって、DisplayName、Name、Version の 3 つ以外のすべてのプロパティが除外されます。次に、フィルタされたデータは、Sort-Object に渡されます。それによって DisplayName 別に情報が並べ替えられます。この処理を行うコマンドは次のようになります。

get-wmiobject -namespace root\ccm -class ccm_installedcomponent -computername atl-fs-01
 | Select-Object displayname,name,version | Sort-Object displayname

次に返されるデータの種類を示します。

displayname                name                       version
-----------                ----                       -------
CCM Framework              CcmFramework               2.50.4160.2000
CCM Policy Agent           CcmPolicyAgent             2.50.4160.2000
CCM Status Agent           CcmStatusAgent             2.50.4160.2000
SMS Client Core Components SmsClient                  2.50.4160.2000
SMS Inventory Agent        SmsInventory               2.50.4160.2000
SMS Remote Control Agent   SmsRemoteTools             2.50.4160.2000
SMS Shared Components      SmsCommon                  2.50.4160.2000
SMS Software Distributi... SmsSoftwareDistribution    2.50.4160.2000
SMS Software Metering A... SmsSoftwareMetering        2.50.4160.2000
SMS Software Update Agent  SmsSoftwareUpdate          2.50.4160.2000
SMS Source List Update ... SmsSourceUpdateAgent       2.50.4160.2000

一方、プロパティやプロパティ値を除外せずに、Win32_BIOS が提供するすべてを確認したい場合もよくあります。すべてのプロパティ (とプロパティ値) に関する情報を取得するには、Get-WmiObject が返すデータを Select-Object にパイプ処理し、ワイルドカード文字 * を使用してすべてのプロパティ値が必要であることを示します。

Get-WmiObject win32_bios | Select-Object *

すべてのシステム プロパティが必要ではない場合 (__SUPERCLASS と __RELPATH など)、-excludeproperty パラメータを追加し、ワイルドカード文字を使用してアンダースコア文字で名前が始まるプロパティをすべて除外します。

Get-WmiObject win32_bios | Select-Object * -excludeproperty "_*"

ボーナス ヒント   WMI 自体の使用方法は簡単です。常にそれほど簡単ではないのは、特定の WMI クラスのプロパティとメソッドを把握することです。それが困難だったのは過去のことであるということを確認してください。Windows PowerShell を使用すると、Get-WmiObject を使用するだけで、問題のクラス (たとえば Win32_BIOS) に接続してから、Get-Member コマンドレット経由でその情報をパイプ処理できます。

Get-WmiObject win32_bios | get-member

どのような結果になるでしょうか。次のように、Win32_BIOS のプロパティとメソッドが表示されます。

BiosCharacteristics       Property              System.UInt16[] BiosCharacte...
BIOSVersion               Property              System.String[] BIOSVersion ...
BuildNumber               Property              System.String BuildNumber {g...

など...

Get-WmiObject のエイリアス
  • gwmi

関連リンク