about_WMI_Cmdlets

適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

概要をここに挿入してください。

トピック

about_WMI_cmdlets

概要

Windows Management Instrumentation (WMI) と Windows PowerShell® の背景情報を提供します。

詳細説明

このトピックでは、WMI テクノロジ、Windows PowerShell の WMI コマンドレット、WMI ベースのリモート処理、WMI のアクセラレータ、および WMI のトラブルシューティングについて説明します。また、WMI に関する詳細情報へのリンクも紹介します。

WMI について

Windows Management Instrumentation (WMI) は、企業環境で管理情報にアクセスするための標準技術を開発する業界的な取り組み Web-Based Enterprise Management (WBEM) を Microsoft が実装したものです。WMI では、Common Information Model (CIM) 業界標準を使用して、システム、アプリケーション、ネットワーク、デバイスなどの管理対象コンポーネントを表現します。CIM は、分散管理タスク フォース (DMTF) によって開発され、管理されます。WMI を使用して、ローカル コンピューターとリモート コンピューターの両方を管理することができます。たとえば、WMI を使用して、以下を行うことができます。

リモート コンピューターでプロセスを開始する。

コンピューターをリモートから再起動する。

ローカル コンピューターまたはリモート コンピューターにインストールされているアプリケーションの一覧を取得する。

ローカル コンピューターまたはリモート コンピューター上の Windows イベント ログに対してクエリを実行する。

Windows PowerShell の WMI コマンドレット

Windows PowerShell の WMI 機能は、既定で Windows PowerShell で使用できる一連のコマンドレットを通じて実装されています。これらのコマンドレットを使用して、ローカル コンピューターやリモート コンピューターの管理に必要なエンド ツー エンドのタスクを完了できます。

WMI コマンドレットには、次のものがあります。

      Cmdlet                 Description
      ------------------     ----------------------------------------------
      Get-WmiObject          Gets instances of WMI classes or information 
                             about the available classes.

      Invoke-WmiMethod       Calls WMI methods.

      Register-WmiEvent      Subscribes to a WMI event.

      Remove-WmiObject       Deletes WMI classes and instances.

      Set-WmiInstance        Creates or modifies instances of WMI classes.

サンプル コマンド

次のコマンドを実行すると、ローカル コンピューターの BIOS 情報が表示されます。

          C:\PS> get-wmiobject win32_bios | format-list *

次のコマンドを実行すると、3 台のリモート コンピューターの WinRM サービスに関する情報が表示されます。

          C:\PS> get-wmiobject -query "select * from win32_service where name='WinRM'" -computername server01, server01, server03

次の複雑なコマンドを実行すると、特定のプログラムのすべてのインスタンスが終了します。

          C:\PS> notepad.exe
          C:\PS> $np = get-wmiobject -query "select * from win32_process where name='notepad.exe'" 
          C:\PS> $np | remove-wmiobject

WMI ベースのリモート処理

WMI を使用してローカル システムを管理できる点も便利ですが、WMI が強力な管理ツールである理由は、そのリモート処理機能です。WMI では、システムの接続と管理に、Microsoft の分散コンポーネント オブジェクト モデル (DCOM) を使用します。システムによっては、DCOM 接続を許可する構成が必要になります。ファイアウォールの設定や DCOM のアクセス許可のロック ダウンによって、リモートからシステムを管理する WMI の機能がブロックされることがあります。

WMI の型アクセラレータ

Windows PowerShell には、WMI の型アクセラレータが組み込まれています。これらの WMI の型アクセラレータ (ショートカット) を使用すると、型アクセラレータ以外の方法を使用する場合よりも直接的に WMI オブジェクトにアクセスできます。

WMI では、次の型アクセラレータがサポートされています。

[WMISEARCHER]

WMI オブジェクトを検索するためのショートカットです。

[WMICLASS]

クラスの静的プロパティと静的メソッドにアクセスするためのショートカットです。

[WMI]

クラスの 1 つのインスタンスを取得するためのショートカットです。

[WMISEARCHER]

ManagementObjectSearcher の型アクセラレータです。文字列コンストラクターを受け取ってサーチャーを作成し、そのサーチャーに対して GET() を実行できます。

たとえば、次のように入力します。

      PS> $s = [WmiSearcher]'Select * from Win32_Process where Handlecount > 1000'
      PS> $s.Get() |sort handlecount |ft handlecount,__path,name -auto
      handlecount  __PATH                                              name
      -----------  ------                                              ----
      1105         \\SERVER01\root\cimv2:Win32_Process.Handle="3724"   PowerShell...
      1132         \\SERVER01\root\cimv2:Win32_Process.Handle="1388"   winlogon.exe
      1495         \\SERVER01\root\cimv2:Win32_Process.Handle="2852"   iexplore.exe
      1699         \\SERVER01\root\cimv2:Win32_Process.Handle="1204"   OUTLOOK.EXE
      1719         \\SERVER01\root\cimv2:Win32_Process.Handle="1912"   iexplore.exe
      2579         \\SERVER01\root\cimv2:Win32_Process.Handle="1768"   svchost.exe

[WMICLASS]

ManagementClass の型アクセラレータです。この型アクセラレータに含まれる文字列コンストラクターは、WMI クラスへのローカル WMI パスまたは絶対 WMI パスを受け取り、そのクラスにバインドされたオブジェクトを返します。

たとえば、次のように入力します。

      PS> $c = [WMICLASS]"root\cimv2:WIn32_Process"
      PS> $c |fl *
      Name             : Win32_Process
      __GENUS          : 1
      __CLASS          : Win32_Process
      __SUPERCLASS     : CIM_Process
      __DYNASTY        : CIM_ManagedSystemElement
      __RELPATH        : Win32_Process
      __PROPERTY_COUNT : 45
      __DERIVATION     : {CIM_Process, CIM_LogicalElement, CIM_ManagedSystemElement}
      __SERVER         : SERVER01
      __NAMESPACE      : ROOT\cimv2
      __PATH           : \\SERVER01\ROOT\cimv2:Win32_Process

[WMI]

ManagementObject の型アクセラレータです。この型アクセラレータに含まれる文字列コンストラクターは、WMI インスタンスへのローカル WMI パスまたは絶対 WMI パスを受け取り、そのインスタンスにバインドされたオブジェクトを返します。

たとえば、次のように入力します。

      PS> $p = [WMI]'\\SERVER01\root\cimv2:Win32_Process.Handle="1204"'
      PS> $p.Name
      OUTLOOK.EXE

WMI のトラブルシューティング

以下は、リモート コンピューターに接続する際に発生する可能性のある一般的な問題です。

問題 1:

リモート コンピューターがオンラインになっていない。

コンピューターがオフラインの場合は、WMI を使用して接続することはできません。次のようなエラー メッセージが表示される場合があります。

          "Remote server machine does not exist or is unavailable"

このエラー メッセージが表示された場合は、コンピューターがオンラインになっていることを確認します。リモート コンピューターに ping を実行します。

問題 2:

リモート コンピューターに対するローカル管理者権限がない。

リモートから WMI を使用するには、リモート コンピューターに対するローカル管理者権限が必要です。権限がないと、そのコンピューターへのアクセスは拒否されます。

名前空間のセキュリティを確認するには:

a. [スタート] をクリックし、[マイ コンピューター] を右クリックして、[管理] をクリックします。

b. [コンピューターの管理] で [サービスとアプリケーション] を展開し、[WMI コントロール] を右クリックして、[プロパティ] をクリックします。

c. [WMI コントロールのプロパティ] ダイアログ ボックスの [セキュリティ] タブをクリックします。

問題 3:

ファイアウォールでリモート コンピューターへのアクセスがブロックされている。

WMI は、DCOM (分散 COM) および RPC (リモート プロシージャ コール) プロトコルを使用して、ネットワーク上を転送されします。多くのファイアウォールでは、DCOM や RPC のトラフィックが既定でブロックされています。ファイアウォールでこれらのプロトコルがブロックされていると、接続が失敗します。たとえば、Microsoft Windows XP Service Pack 2 の Windows ファイアウォールは、DCOM や WMI など、受信者側が送信を要求していないすべてのネットワーク トラフィックを自動的にブロックするように構成されていますWindows ファイアウォールの既定の構成では、着信した WMI 要求は拒否され、次のエラー メッセージが表示されます。

          "Remote server machine does not exist or is unavailable"

WMI の詳細情報

WMI の詳細については、MSDN (Microsoft Developer Network) ライブラリの次のトピックを参照してください。

WMI について

https://go.microsoft.com/fwlink/?LinkId=142212

WMI のトラブルシューティング

https://go.microsoft.com/fwlink/?LinkId=142213

また、Microsoft TechNet スクリプト センターの Windows Management Instrumentation のトラブルシューティングとヒントに関するページを参照してください。

https://go.microsoft.com/fwlink/?LinkId=142214

関連項目

オンライン版:https://go.microsoft.com/fwlink/?LinkId=142219

Get-WmiObject

Invoke-WmiMethod

Register-WmiEvent

Remove-WmiObject

Set-WmiInstance