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