VBScript を使用した WMI への接続

WMI スクリプトを使用すると、C++ プログラムで必要な手順の多くを簡略化できます。 SWbemLocator オブジェクトだけでなく、モニカー "winmgmts:" を介して WMI に接続することもできます。 モニカーとは、WMI において、名前空間、クラス、またはインスタンスを検索するための短い名前です。 "winmgmts:" という名前は、WMI オブジェクトを使用するように Windows スクリプト ホストに指示し、既定の名前空間に接続し、SWbemServices オブジェクトを取得する WMI モニカーです。 偽装レベルや特定のクラスまたはインスタンスなどの他の接続情報は、モニカー名の後の文字列に表示されます。 WMI オブジェクトを作成または取得する呼び出しでモニカーを使用できます。 詳細については、「モニカー文字列の作成」を参照してください。

次の手順では、SWbemLocator を使用して WMI に接続する方法について説明します。

SWbemLocator を使用して WMI に接続するには

  1. CreateObject を呼び出してロケーター オブジェクトを取得します。

    Set Locator = CreateObject("WbemScripting.SWbemLocator")
    
  2. ConnectServer メソッドの呼び出しを使用して名前空間にログオンします。

    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objService = objLocator.ConnectServer(".", "root\cimv2")
    

    ConnectServer の呼び出しでコンピューターを指定しない場合、WMI ではローカル コンピューターに接続します。 名前空間を指定しない場合、WMI ではレジストリ キーで指定された名前空間に接続します。

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Default Namespace

    既定の名前空間は \root\cimv2 です。 名前空間の詳細については、WMI 内での階層の作成に関する記事を参照してください。

  3. SWbemServices.Security_ メソッドの呼び出しで偽装レベルを設定します。

    objService.Security_.ImpersonationLevel = 3 
    

    詳細については、「VBScript を使用した既定のプロセス セキュリティ レベルの設定」を参照してください。

  4. スクリプトの目的を実装します。

    WMI では、ネットワーク全体のデータへのアクセスと操作に使用するさまざまなスクリプト オブジェクトを公開します。 詳細については、「クラスとインスタンスの情報の操作」および WMI 用スクリプト API に関する記事を参照してください。

    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objService = objLocator.ConnectServer(".", "root\cimv2")
    objService.Security_.ImpersonationLevel = 3
    Set Jobs = objService.ExecQuery("SELECT * FROM Win32_ScheduledJob")
    i=0
    For each Job in Jobs
        i = i+1   
        WScript.Echo Job.JobId & "  " & Job.Command & VBNewLine
    Next
    If i = 0 Then
        WScript.Echo "No Jobs Scheduled with the AT command were found"
    End If
    

次の手順では、WMI に接続し、モニカーを使用してオブジェクトを取得する方法について説明します。

WMI に接続し、モニカーを使用してオブジェクトを取得するには

  1. 入力パラメーターでモニカーを使用して GetObject を呼び出します。

    'the simple version
    Set MyObject = GetObject("winMgmts::Win32_scheduledJob")
    
    'Or the more complex version
    strComputer = "."
    Set MyObject = GetObject("winMgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\Root\CIMv2:Win32_ScheduledJob")
    

    モニカーには、WMI への接続に使用できる多数の要素が含まれています。

    • "winmgmts:" によって、スクリプト API オブジェクトを使用するように WSH に指示します。 この特定の例では、WSH で、システム上の最初の Win32_scheduledJob を記述する SWbemObject を返す必要があることを認識します。 返される可能性があるその他のオブジェクトは、モニカーで記述した内容に応じて、SWbemCollection または SWbemServices オブジェクトです。

    • 必要に応じて、接続のセキュリティ レベルを設定できます。 ただし、モニカーで名前とパスワードの情報を設定することはできないことに注意してください。 詳細については、「スクリプト クライアントのセキュリティ保護」を参照してください。

    • 必要に応じて、WMI オブジェクトへのパスを定義できます。 これには、ローカルまたはリモート コンピューター、名前空間、クラスの名前が含まれます。 WMI スクリプトでの VBScript GetObject の使用の詳細については、インスタンスの作成WMI インスタンスの取得に関する記事を参照してください。

  2. 単一の項目またはコレクションを取得する代わりに、(前の例で説明したように) SWbemServices オブジェクトを取得することもできます。 その後、返されたオブジェクトに対して追加のクエリを呼び出すことができます。

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colScheduledJobs = objWMIService.ExecQuery("Select * from Win32_ScheduledJob")
    For Each objJob in colScheduledJobs
        Wscript.Echo "Job ID: " & objJob.JobId & "Command: " & objJob.Command & VBNewLine
    Next
    

    前の例では、impersonate、つまり impersonationLevel=3 が既定のプロセス セキュリティ レベルです。 次の例では、プロセス セキュリティを委任するように変更する必要がない限り、このプロセス セキュリティ レベルを指定する必要はありません。 詳細については、「VBScript を使用した既定のプロセス セキュリティ レベルの設定」を参照してください。

WMI でのスクリプト作成