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

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

Windows Management Instrumentation (WMI) は、Windows システム管理のための中核となるテクノロジであり、幅広い種類の情報を一貫した方法で公開します。Windows Management Instrumentation (WMI) is a core technology for Windows system administration because it exposes a wide range of information in a uniform manner. WMI によって可能になるタスクが非常に多いことから、WMI オブジェクトにアクセスするための Windows PowerShell コマンドレットである Get-WmiObject は、実際の作業を行うための最も便利なコマンドレットの 1 つと言えます。Because of how much WMI makes possible, the Windows PowerShell cmdlet for accessing WMI objects, Get-WmiObject, is one of the most useful for doing real work. ここでは、Get-WmiObject を使って WMI オブジェクトにアクセスする方法と、WMI オブジェクトを使って特定の作業を行う方法について説明します。We are going to discuss how to use Get-WmiObject to access WMI objects and then how to use WMI objects to do specific things.

WMI クラスの一覧を取得するListing WMI Classes

WMI のほとんどのユーザーが直面する最初の問題は、WMI で何ができるかを調べることです。The first problem most WMI users encounter is trying to find out what can be done with WMI. WMI クラスは、管理できるリソースを記述しています。WMI classes describe the resources that can be managed. 何百もの WMI クラスがあり、その中には数十個のプロパティを持つクラスもあります。There are hundreds of WMI classes, some of which contain dozens of properties.

この問題に対処するため、Get-WmiObject では WMI を探索可能にしました。Get-WmiObject addresses this problem by making WMI discoverable. ローカル コンピューター上で使える WMI クラスの一覧を取得するには、次のように入力します。You can get a list of the WMI classes available on the local computer by typing:

PS> Get-WmiObject -List

__SecurityRelatedClass                  __NTLMUser9X
__PARAMETERS                            __SystemSecurity
__NotifyStatus                          __ExtendedStatus
Win32_PrivilegesStatus                  Win32_TSNetworkAdapterSettingError
Win32_TSRemoteControlSettingError       Win32_TSEnvironmentSettingError

同じ情報をリモート コンピューターから取得するには、次のように、ComputerName パラメーターにコンピューター名や IP アドレスを指定します。You can retrieve the same information from a remote computer by using the ComputerName parameter, specifying a computer name or IP address:

PS> Get-WmiObject -List -ComputerName

__SystemClass                           __NAMESPACE
__Provider                              __Win32Provider
__ProviderRegistration                  __ObjectProviderRegistration

リモート コンピューターから返されるクラスの一覧は、そのコンピューターで実行されている特定のオペレーティング システムや、インストールされているアプリケーションによって追加された特定の WMI 拡張機能に応じて異なることがあります。The class listing returned by remote computers may vary due to the specific operating system the computer is running and the particular WMI extensions added by installed applications.


Get-WmiObject を使ってリモート コンピューターに接続するときは、リモート コンピューターで WMI が実行されている必要があり、既定の構成の場合、接続に使うアカウントがリモート コンピューターのローカル管理者グループに属している必要があります。When using Get-WmiObject to connect to a remote computer, the remote computer must be running WMI and, under the default configuration, the account you are using must be in the local administrators group on the remote computer. リモート システムに Windows PowerShell をインストールする必要はありません。The remote system does not need to have Windows PowerShell installed. そのため、WMI が利用可能であれば、Windows PowerShell を実行していないオペレーティング システムであっても管理できます。This allows you to administer operating systems that are not running Windows PowerShell, but do have WMI available.

また、ローカル システムに接続するときに、コンピューター名を含めることもできます。You can even include the ComputerName when connecting to the local system. ローカル コンピューターの名前、IP アドレス (またはループバック アドレス、WMI スタイル '.' をコンピューター名として使うことができます。You can use the local computer's name, its IP address (or the loopback address, or the WMI-style '.' as the computer name. IP アドレスが で、Admin01 という名前のコンピューターで Windows PowerShell を実行している場合、次のコマンドはそのコンピューターのすべての WMI クラスの一覧を返します。If you are running Windows PowerShell on a computer named Admin01 with IP address, the following commands will all return the WMI class listing for that computer:

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

Get-WmiObject は、既定では root/cimv2 名前空間を使います。Get-WmiObject uses the root/cimv2 namespace by default. 別の WMI 名前空間を指定する場合は、Namespace パラメーターを使って、対応する名前空間のパスを指定します。If you want to specify another WMI namespace, use the Namespace parameter and specify the corresponding namespace path:

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

__SystemClass                           __NAMESPACE
__Provider                              __Win32Provider

WMI クラスの詳細を表示するDisplaying WMI Class Details

WMI クラスの名前がわかっている場合は、その名前を使って情報をすぐに取得できます。If you already know the name of a WMI class, you can use it to get information immediately. たとえば、コンピューターに関する情報を取得するためによく使われる WMI クラスの 1 つに、Win32_OperatingSystem があります。For example, one of the WMI classes commonly used for retrieving information about a computer is Win32_OperatingSystem.

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

ここでは、すべてのパラメーターを示しましたが、このコマンドはもっと簡潔に表現できます。Although we are showing all of the parameters, the command can be expressed in a more succinct way. ComputerName パラメーターは、ローカル システムに接続するときには必要ありません。The ComputerName parameter is not necessary when connecting to the local system. 最も一般的なケースを示し、このパラメーターを思い出してもらうために使いました。We show it to demonstrate the most general case and remind you about the parameter. Namespace の既定値は root/cimv2 であるため、これも省略できます。The Namespace defaults to root/cimv2, and can be omitted as well. 最後に、ほとんどのコマンドレットでは、共通のパラメーターの名前を省略できます。Finally, most cmdlets allow you to omit the name of common parameters. Get-WmiObject の場合、最初のパラメーターに名前が指定されていないときには、Windows PowerShell はそれを Class パラメーターとして扱います。With Get-WmiObject, if no name is specified for the first parameter, Windows PowerShell treats it as the Class parameter. したがって、先ほどのコマンドは、次のように入力することもできました。This means the last command could have been issued by typing:

Get-WmiObject Win32_OperatingSystem

Win32_OperatingSystem クラスには、ここで紹介した以外にも多数のプロパティがあります。The Win32_OperatingSystem class has many more properties than those displayed here. Get-Member を使うと、すべてのプロパティを参照できます。You can use Get-Member to see all the properties. WMI クラスのプロパティは、他のオブジェクト プロパティと同じように自動的に取得できます。The properties of a WMI class are automatically available like other object properties:

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

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

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

既定以外のプロパティを Format コマンドレットで表示するDisplaying Non-Default Properties with Format Cmdlets

Win32_OperatingSystem クラスに含まれている情報のうち、既定では表示されない情報を表示するには、Format コマンドレットを使います。If you want information contained in the Win32_OperatingSystem class that is not displayed by default, you can display it by using the Format cmdlets. たとえば、利用可能なメモリのデータを表示するには、次のように入力します。For example, if you want to display available memory data, type:

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

TotalVirtualMemorySize TotalVisibleMemory FreePhysicalMemory FreeVirtualMemory FreeSpaceInPagingFiles
---------------------- ---------------    ------------------ -==--------------------- ---------------
               2097024          785904                305808           2056724                1558232


Format-Table のプロパティ名にはワイルドカードを指定できるので、最後のパイプライン要素は Format-Table -Property Total,Free のように省略できますWildcards work with property names in Format-Table, so the final pipeline element can be reduced to Format-Table -Property Total,Free

メモリのデータは、次のように入力して一覧の形式にすると、さらに読みやすくなります。The memory data might be more readable if you format it as a list by typing:

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