Windows リモート管理と WMI
Windows リモート管理を使用すると、Windows Management Instrumentation (WMI および MI) によって公開されるデータを取得できます。 WinRM Scripting API を使用するスクリプトまたはアプリケーション、または Winrm コマンドライン ツールを使用して WMI データを取得できます。
WinRM は、埋め込みオブジェクトを含む、使い慣れた WMI クラスと操作のほとんどをサポートします。 WinRM は WMI を利用して、リソースに関するデータを収集したり、Windows ベースのオペレーティング システム上のリソースを管理したりできます。 つまり、既存の WMI クラスを使用して、企業内のディスク、ネットワーク アダプター、サービス、プロセスなどのオブジェクトに関するデータを取得できます。 また、標準の WMI IPMI プロバイダーから使用可能なハードウェア データにアクセスすることもできます。
WMI リソースの識別
WMI クラスは、WinRM および WS-Management プロトコル (サービスやディスクなどのマネージド エンティティの種類) で リソース として参照できます。
WMI クラスまたはメソッドは、WS-Management プロトコルを使用する場合と同様に、URIによって識別されます。 URI は、WMI リソース (クラス)、WMI アクション (メソッド)、またはネットワーク経由で送信メッセージクラスの特定のインスタンスを識別できます。 詳細については、「リソース URI」を参照してください。
WMI クラスの URI プレフィックスの構築
URI プレフィックスには、固定部分と WMI 名前空間が含まれています。 たとえば、プレフィックスの固定部分を含む Windows Server の URI プレフィックスは、http://schemas.microsoft.com/wbem/wsman/1/wmi/<WmiNamespace>
です。 これにより、任意の WMI 名前空間に対して URI プレフィックスを生成できます。 たとえば、root\default WMI 名前空間にアクセスするには、次の URI プレフィックスを使用します:http://schemas.microsoft.com/wbem/wsman/1/wmi/root/default/
。
管理用の WMI クラスの大部分は、root\cimv2 名前空間にあります。
root\cimv2 名前空間のクラスとインスタンスにアクセスするには、URI プレフィックス (http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/
) を使用します。 詳細については、「リソース URI」を参照してください。
WMI クラスの完全な URI の生成
Winrm コマンドライン ツールまたはスクリプトに指定する URI は、プレフィックスとリソース指定で構成されます。
次の手順では、WMI クラスを取得するか、列挙操作で使用するリソース URI を生成する方法について説明します。
WMI クラスのリソース URI を生成するには
WS-Management プロトコル スキーマを使用する必要があることを示すプレフィックスから始めます。
https://schemas.microsoft.com/wbem/wsman/1
WMI クラスのリソース URI プレフィックスは常に同じです。 詳細については、「URI プレフィックスの」を参照してください。
プレフィックスに WMI 名前空間を追加します。
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/
クラス名を追加します。
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service
プロパティの値を設定したり、特定のメソッドを呼び出したりするには、クラスに必要なキー値または値を追加します。
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=Winmgmt
キー値を空白のままにした場合、元のプロパティ値は変更されません。
手記
キー値を空白のままにすると、プロパティ値が NULL 設定されます。
WinRM を使用した WMI リソースの検索
WMI データは、コマンド ライン ツール、Winrm 、または WinRM Scripting APIを使用する Visual Basic スクリプトを使用して取得できます。 リソースの検索に WMI パス は使用しません。 代わりに、WMI 名前空間と階層を URIに変換します。
WMI クラスの WinRM URI には、URI プレフィックス とアクセスするクラスの 2 つの部分が含まれています。
たとえば、Session.Enumerate メソッドに次の URI を指定して、コンピューター上のすべてのサービスを一覧表示できます。 URI プレフィックスが http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/
され、クラスが Win32_Service。
strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_CurrentTime"
WMI で、リソースまたはクラスのすべてのインスタンスのデータをいくつかの方法で一覧表示します。
そのリソースのすべてのインスタンスのクエリ。
Set colServices = objWMIService.ExecQuery("Select * from Win32_Service")
SWbemServices.InstancesOf または SWbemObject.Instances_の呼び出し。
Set colServices = InstancesOf("Win32_Service")
WinRM では、リソースのすべてのインスタンスを一覧表示する方法が 1 つあります。Session.Enumerate。
strResource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service"
Set colServices = objSession.Enumerate( strResource )
WMI リソースの特定のインスタンスの検索
WMI では、キー プロパティの値を指定するか、プロパティ値のリストに一致するインスタンスに対してクエリを実行することで、クラスの特定のインスタンスを指定できます。 キー プロパティには、WMI キー修飾子があります。
クラスの特定のインスタンスは、いくつかの方法で取得できます。
Session.Enumerate を呼び出し、フィルター と 方言 パラメーターを使用してクエリを作成します。
RemoteComputer = "servername.domain.com" strDialect = "http://schemas.microsoft.com/wbem/wsman/1/WQL" strResource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/*" Set objWsman = CreateObject("Wsman.Automation") Set objSession = objWsman.CreateSession("https://" & RemoteComputer) strFilter = "SELECT * FROM Win32_Share WHERE Name='Admin$'" Set objResultSet = objSession.Enumerate(strResource, strFilter, strDialect)
SWbemServices.Getの呼び出し。 Session.Getでは、疑問符 (?) の前に 1 つ以上の特定のキー値を指定する必要があります。
特定のインスタンスの URI の形式は
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/WMI_Class?Key1=Value
です。strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=winmgmt"
WMI クラスには複数のキーが含まれる場合があります。 キーの名前と値のペアは、"+" 記号で区切ります。 その場合、形式は
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Key1=Value1+Key2=Value2
です。シングルトン WMI オブジェクトを取得するための WinRM 構文は、WMI とは異なります。 シングルトンは、1 つのインスタンスのみが許可されるように定義された WMI クラスです。 WIN32_CURRENTTIME または Win32_WMISetting は、WMI シングルトン クラスの例です。
シングルトンの WMI 構文を次の VBScript コード例に示します。
Set TimeObject = objWMIService.Get("Win32_CurrentTime=@")
次の例は、"@" を使用しない WinRM シングルトン構文を示しています。
strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_CurrentTime"
ResourceLocator または IWSManResourceLocatorオブジェクトにセレクター追加します。
次の VBScript コード例は、セレクターを使用して Win32_Processorの特定のインスタンスを取得する方法を示しています。
strUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Processor" Set objWsman = CreateObject("Wsman.Automation") Set Session = objWsman.CreateSession Set Locator = objWsman.CreateResourceLocator(strUri) Locator.AddSelector "DeviceID", "CPU0"
関連トピック
-
Windows リモート管理 について
-
Windows リモート管理 での スクリプト