枚举或列出资源的所有实例

Session.Enumerate 方法是获取指定资源的所有实例的 Windows 远程管理方法。

Session.Enumerate 方法不会获取 SWbemObjectSet 对象中的集合,如 SWbemService.ExecQuery 调用,将 WMI 查询作为参数 (例如 ExecQuery("SELECT * from Win32_LogicalDisk") ,) 或对方法(如 SWbemObject.Instances_)的调用。 Session.EnumerateEnumerator 对象方法更类似于用于将文件作为流读取的 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 方法建立一个WS-Management协议枚举上下文,该上下文在 Enumerator 对象中维护。

    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 远程管理参考