Windows リモート管理と WMI

Windows リモート管理を使用すると、Windows Management Instrumentation (WMI および MI) によって公開されるデータを取得できます。 WMI データは、 WinRM スクリプト API を使用するスクリプトまたはアプリケーション、または Winrm コマンド ライン ツールを使用して取得できます。

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 を生成するには

  1. WS-Management プロトコル スキーマを使用する必要があることを示すプレフィックスから始めます。

    https://schemas.microsoft.com/wbem/wsman/1

    WMI クラスのリソース URI プレフィックスは常に同じです。 詳細については、「 URI プレフィックス」を参照してください。

  2. WMI 名前空間をプレフィックスに追加します。

    http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/

  3. クラス名を追加します。

    http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service

  4. プロパティの値を設定するか、特定のメソッドを呼び出すには、 クラスに必要なキー値または値を追加します。

    http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=Winmgmt

    キー値を空白のままにした場合、元のプロパティ値は変更されません。

    注意

    キー値を空白のままにすると、プロパティ値が NULL に設定されます。

     

WinRM を使用した WMI リソースの検索

WMI データは、コマンド ライン ツール、 Winrm、または WinRM スクリプト API を使用する Visual Basic スクリプトを使用して取得できます。 WMI パスを使用してリソースを検索することはありません。 代わりに、WMI 名前空間と階層を URI に変換 します

WMI クラスの WinRM URI には、 URI プレフィックス とアクセスするクラスの 2 つの部分が含まれています。

たとえば、次の URI を Session.Enumerate メソッドに指定して、コンピューター上のすべてのサービスを一覧表示できます。 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 リモート管理について

URI プレフィックス

リソース URI

Windows リモート管理でのスクリプト作成