トピック 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