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 が実装したものです。WBEM とは、企業環境で管理情報にアクセスするための標準技術を確立する業界の取り組みの 1 つです。 WMI では、Common Information Model (CIM) 業界規格を使用して、システム、アプリケーション、ネットワーク、デバイスなどのマネージド コンポーネントを表現します。 CIM は、分散管理タスク フォース (DMTF) によって開発され、管理されています。 WMI を使用して、ローカル コンピューターとリモート コンピューターの両方を管理できます。 たとえば、WMI を使用して次の操作を行うことができます。

  • リモート コンピューターでプロセスを開始します。
  • コンピューターをリモートで再起動します。
  • ローカル コンピューターまたはリモート コンピューターにインストールされているアプリケーションの一覧を取得します。
  • ローカル コンピューターまたはリモート コンピューターで Windows イベント ログに対してクエリを実行します。

WINDOWS POWERSHELL の WMI コマンドレット

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

次の WMI コマンドレットが含まれています。

コマンドレット 説明
Get-WmiObject WMI クラスまたは情報のインスタンスを取得します。
使用可能なクラスについて。
Invoke-WmiMethod WMI メソッドを呼び出します。
Register-WmiEvent WMI イベントをサブスクライブします。
Remove-WmiObject WMI クラスとインスタンスを削除します。
Set-WmiInstance WMI クラスのインスタンスを作成または変更します。

サンプル コマンド

次のコマンドは、ローカル コンピューターの BIOS 情報を表示します。

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

次のコマンドは、3 台のリモート コンピューターの WinRM サービスに関する情報を表示します。

$wql = "select * from win32_service where name='WinRM'"
get-wmiobject -query $wql -computername server01, server01, server03

次のより複雑なコマンドは、プログラムのすべてのインスタンスを終了します。

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

WMI-BA Standard Edition D リモート処理

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

WMI 型アクセラレータ

Windows PowerShell には、WMI 型アクセラレータが含まれています。 これらの WMI 型アクセラレータ (ショートカット) を使用すると、WMI オブジェクトへの直接アクセスは、非型アクセラレータアプローチで許可されるよりも多くなります。

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

[WMI Standard Edition ARCHER] - WMI オブジェクトを検索するためのショートカット。

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

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

[WMI Standard Edition ARCHER] は、ManagementObjectSearcher の型アクセラレータです。 文字列コンストラクターを使用して検索ツールを作成し、GET() を実行できます。

次に例を示します。

PS> $s = [WmiSearcher]'Select * from Win32_Process where Handlecount > 1000'
PS> $s.Get() |sort handlecount |ft handlecount,__path,name -auto

count  __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 パスを受け取り、そのクラスにバインドされているオブジェクトを返す文字列コンストラクターがあります。

次に例を示します。

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 パスを受け取り、そのインスタンスにバインドされているオブジェクトを返す文字列コンストラクターがあります。

次に例を示します。

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 をリモートで使用するには、リモート コンピューターのローカル管理者権限が必要です。 そうしないと、そのコンピューターへのアクセスが拒否されます。

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

  1. [スタート] をクリックし、[マイ コンピューター] を右クリックし、[管理] をクリックします。
  2. [コンピューターの管理] で、[サービスとアプリケーション] を展開し、[WMI コントロール] を右クリックし、[プロパティ] をクリックします。
  3. [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

関連項目