about_WMI_Cmdlets
トピック
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 コマンドレットには、次のものがあります。
Cmdlet説明
------------------ ------------------------------------------------
Get-WmiObject WMI クラスのインスタンスまたは使用可能なクラスに
関する情報を取得します。
Invoke-WmiMethod WMI メソッドを呼び出します。
Register-WmiEvent WMI イベントにサブスクライブします。
Remove-WmiObject WMI クラスおよびインスタンスを削除します。
Set-WmiInstance WMI クラスのインスタンスを作成または変更します。
サンプル コマンド
次のコマンドを実行すると、ローカル コンピューターの BIOS 情報が表示され
ます。
C:\PS> get-wmiobject win32_bios | format-list *
次のコマンドを実行すると、リモート コンピューターの 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 クラスへのローカル WIM パスまたは絶対 WIM
パスを受け取り、そのクラスにバインドされたオブジェクトを返します。
次にその例を示します。
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 インスタンスへのローカル WIM パスまたは絶対
WIM パスを受け取り、そのインスタンスにバインドされたオブジェクトを返し
ます。
次にその例を示します。
PS> $p = [WMI]'\\SERVER01\root\cimv2:Win32_Process.Handle="
1204"'
PS> $p.Name
OUTLOOK.EXE
WMI のトラブルシューティング
リモート コンピューターに接続するときによく発生する問題を次に示します。
問題 1: リモート コンピューターがオンラインになっていない。
コンピューターがオフラインの場合、WMI を使用してそのコンピューターに
接続することはできません。次のエラー メッセージを受け取る場合があります。
"リモート サーバー コンピューターが存在しないか、利用できません。"
このエラー メッセージを受け取った場合、コンピューターがオンラインであるか
どうかを確認します。
リモート コンピューターに対して 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 要求は拒否され、
次のエラー メッセージが表示されます。
"リモート サーバー コンピューターが存在しないか、利用できません。"
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