查询资源的特定实例
对 Session.Enumerate 的调用具有将枚举缩小到查询中的可选参数。 由于 WinRM 脚本 API 和 WinRM C++ API 在基础 WS-Management 协议上进行了密切建模,因此参数使用与协议(筛选器和筛选器方言)相同的术语进行查询。
您可以使用 Session.Enumerate 的筛选器和方言参数,也可以构造和提供 ResourceLocator 对象和 AddSelector 方法,但不能同时执行此操作。
此过程对已绑定和启用 TCP/IP 的网络适配器执行查询。 查询请求将 IpEnabled 属性设置为 True 的 Win32_NetworkAdapterConfiguration 的所有实例。 除了添加筛选器和方言外,查询的处理方式与简单的枚举类似。
在此示例中,资源常量的资源名称由星号“*”表示,因为类名 Win32_NetworkAdapterConfiguration 已在 strFilter 字符串中提及。
查询资源的特定实例
为了便于阅读,请将 URI 定义为常量。
Const RemoteComputer = "servername.domain.com" Const Resource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/*" Const Dialect = "http://schemas.microsoft.com/wbem/wsman/1/WQL"
创建会话。
Set objWsman = CreateObject("Wsman.Automation") Set objSession = objWsman.CreateSession("https://" & RemoteComputer)
构造筛选器字符串。 Windows 远程管理支持 WQL 作为筛选器方言。
strFilter = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IpEnabled=TRUE"
在标志参数中设置任何必需的枚举常量。
请注意,如果标志包括枚举常量 WSManFlagHierarchyDeepBasePropsOnly 或 WSManFlagHierarchyShallow,则 WinRM 服务将返回错误代码ERROR_WSMAN_POLYMORPHISM_MODE_UNSUPPORTED。
调用 Session.Enumerate 方法。 此调用将启动枚举。 Session.Enumerate 方法建立在枚举器对象中维护的 WS-Management 协议枚举上下文。
Set objResultSet = objSession.Enumerate(Resource, strFilter, Dialect)
调用 Enumerator.ReadItem 方法以获取结果的下一项。 在 WS-Management 协议中,这对应于拉取操作。 使用 Enumerator.AtEndOfStream 方法作为控件来了解何时停止读取。
While Not objResultSet.AtEndOfStream DisplayOutput(objResultSet.ReadItem) Wend
下面的 VBScript code 示例显示了完整脚本。
Const RemoteComputer = "servername.domain.com"
Const Resource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/*"
Const Dialect = "http://schemas.microsoft.com/wbem/wsman/1/WQL"
Set objWsman = CreateObject("Wsman.Automation")
Set objSession = objWsman.CreateSession("https://" & RemoteComputer)
strFilter = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IpEnabled=TRUE"
Set objResultSet = objSession.Enumerate(Resource, strFilter, Dialect)
While Not objResultSet.AtEndOfStream
DisplayOutput(objResultSet.ReadItem)
Wend
'****************************************************
' 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
相关主题