リソースのすべてのインスタンスの列挙または一覧表示

Session.Enumerate メソッドは、指定されたリソースのすべてのインスタンスを取得するための Windows リモート管理アプローチです。

Session.Enumerate メソッドは、パラメーターとして WMI クエリを使用する SWbemService.ExecQuery 呼び出し (たとえば、ExecQuery("SELECT * from Win32_LogicalDisk")) や、SWbemObject.Instances_などのメソッドの呼び出しなどの SWbemObjectSet オブジェクトのコレクションを取得しません。 Session.Enumerate および Enumerator オブジェクト メソッドは、ストリームとしてファイルを読み取るために使用される スクリプト TextStream オブジェクトの操作とよく似ています。

ファイルをテキスト ストリームとして読み取る場合は、スクリプト TextStream オブジェクトを作成し、 TextStream.Readline メソッドを呼び出してファイルの各行を読み取る必要があります。 同様の方法で、 Session.Enumerate メソッドを呼び出して Enumerator オブジェクトを取得し、 Enumerator.ReadItem メソッドを呼び出して次の項目を取得できます。 テキスト ファイルから読み取る場合と同様に、Enumerator.AtEndOfStream プロパティを呼び出して、データ項目の末尾に達したかどうかをチェックできます。

リソースを列挙するには

  1. セッションを作成します。

    Const RemoteComputer = "servername.domain.com"
    Set objWsman = CreateObject( "WSMan.Automation" )
    Set objSession = objWsman.CreateSession( "https://" _
        & RemoteComputer )
    
  2. リソースを識別する URI を構築します。

    strResource = "http://schemas.microsoft.com/wbem/wsman/1/" &_
                 "wmi/root/cimv2/Win32_ScheduledJob"
    
  3. Session.Enumerate メソッドを呼び出します。 この呼び出しは列挙を開始します。 WinRM では、列挙操作は WMI と同じ方法でコレクションを取得しません。 代わりに、 Session.Enumerate メソッドは 、Enumerator オブジェクトで維持されるWS-Managementプロトコル列挙コンテキストを確立します。

    Set EnumJobs = objSession.Enumerate( strResource )
    
  4. Enumerator.ReadItem メソッドを呼び出して、結果の次の項目を取得します。 WS-Management プロトコルでは、これはプル操作に対応します。 Enumerator.AtEndOfStream メソッドをコントロールとして使用して、読み取りを停止するタイミングを把握します。

    While Not EnumJobs.AtEndOfStream
        NumOfJobs = NumOfJobs + 1
        DisplayOutput( EnumJobs.ReadItem ) 
    Wend
    

次の VBScript コード例は、完全なスクリプトを示しています。

Const RemoteComputer = "servername.domain.com"
Set objWsman = CreateObject( "WSMan.Automation" )
Set objSession = objWsman.CreateSession( "https://" & RemoteComputer )
strResource = "http://schemas.microsoft.com/wbem/wsman/1/" &_
              "wmi/root/cimv2/Win32_ScheduledJob"

Set EnumJobs = objSession.Enumerate( strResource )
NumOfJobs = 0
While Not EnumJobs.AtEndOfStream
    NumOfJobs = NumOfJobs + 1
    DisplayOutput( EnumJobs.ReadItem ) 
Wend
Wscript.Echo "There are " & NumOfJobs & " jobs scheduled."

'****************************************************
' Displays WinRM XML message using built-in XSL
'****************************************************
Sub DisplayOutput( strWinRMXml )
    Dim xmlFile, xslFile
    Set xmlFile = CreateObject( "MSXml2.DOMDocument.3.0" ) 
    Set xslFile = CreateObject( "MSXml2.DOMDocument.3.0" )
    xmlFile.LoadXml( strWinRMXml )
    xslFile.Load( "WsmTxt.xsl" )
    Wscript.Echo xmlFile.TransformNode( xslFile ) 
End Sub

Windows リモート管理について

Windows リモート管理の使用

Windows リモート管理リファレンス