枚举或列出资源的所有实例
Session.Enumerate 方法是获取指定资源的所有实例的 Windows 远程管理方法。
Session.Enumerate 方法不会获取 SWbemObjectSet 对象中的集合,如 SWbemService.ExecQuery 调用,将 WMI 查询作为参数 (例如 ExecQuery("SELECT * from Win32_LogicalDisk")
,) 或对方法(如 SWbemObject.Instances_)的调用。
Session.Enumerate 和 Enumerator 对象方法更类似于用于将文件作为流读取的 TextStream 对象的脚本操作。
若要将文件作为文本流读取,必须创建脚本 TextStream 对象并调用 TextStream.Readline 方法来读取文件的每一行。 以类似的方式,可以调用 Session.Enumerate 方法来获取 Enumerator 对象,并调用 Enumerator.ReadItem 方法以获取下一项。 与从文本文件读取时的情况一样,可以调用 Enumerator.AtEndOfStream 属性来检查是否已到达数据项的末尾。
枚举资源
创建会话。
Const RemoteComputer = "servername.domain.com" Set objWsman = CreateObject( "WSMan.Automation" ) Set objSession = objWsman.CreateSession( "https://" _ & RemoteComputer )
构造 URI 以标识资源。
strResource = "http://schemas.microsoft.com/wbem/wsman/1/" &_ "wmi/root/cimv2/Win32_ScheduledJob"
调用 Session.Enumerate 方法。 此调用启动枚举。 在 WinRM 中,枚举操作获取集合的方式与 WMI 不同。 相反, Session.Enumerate 方法建立一个WS-Management协议枚举上下文,该上下文在 Enumerator 对象中维护。
Set EnumJobs = objSession.Enumerate( strResource )
调用 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
相关主题