SWbemServices 对象

可以使用 SWbemServices 对象的方法对本地主机或远程主机上的命名空间执行操作。 此对象不能由 VBScript CreateObject 调用创建。

成员

SWbemServices 对象具有以下类型的成员:

方法

SWbemServices 对象具有这些方法。

方法 说明
AssociatorsOf 通过一个或多个关联类检索与指定资源关联的托管资源的实例。 提供原始终结点的对象路径, AssociatorsOf 返回位于相反终结点的托管资源。 AssociatorsOf 方法执行“ASSOCIATORS OF”WQL 查询执行的相同函数。
AssociatorsOfAsync 异步返回与指定对象关联的 (类或实例) 的对象集合。
删除 从 CIM 存储库) 删除托管资源 (或类定义的实例。
DeleteAsync 异步删除对象路径中指定的类或实例。
ExecMethod 提供执行由托管资源类定义定义的方法的替代方法。 主要用于脚本语言不支持输出参数的情况。 例如,JScript不支持 out 参数。
ExecMethodAsync 异步执行方法提供程序导出的方法。
ExecNotificationQuery 执行事件订阅查询以接收事件。 事件订阅查询是一个查询,用于定义对要监视的托管环境的更改。 发生更改时,WMI 基础结构会传送描述调用脚本更改的事件。
ExecNotificationQueryAsync 异步执行查询以接收事件。
ExecQuery 执行查询以检索 WMI 托管资源的实例集合 (或类定义) 。 ExecQuery 可用于检索筛选的实例集合,这些实例与传递给 ExecQuery 的查询中定义的条件匹配。
ExecQueryAsync 异步执行查询以检索对象。
Get 根据对象路径检索托管资源 (或类定义的单个实例) 。
GetAsync 基于对象路径异步检索类定义或实例的对象。
InstancesOf 基于类名检索托管资源的所有实例。 默认情况下, InstancesOf 执行深度检索。 也就是说, InstancesOf 检索传递给方法的类名标识的资源实例,并检索在目标 (类) 下定义的子类的所有资源的所有实例。
InstancesOfAsync 根据用户指定的选择条件异步返回指定类的实例。
ReferencesTo 返回引用指定资源的所有关联。 了解 ReferencesTo 的最佳方法是将其与 AssociatorsOf 方法进行比较。 AssociatorsOf 返回处于关联相反端的动态资源。 ReferencesTo 返回关联本身。 ReferencesTo 方法执行与“REFERENCES OF”WQL 查询执行的函数相同。
ReferencesToAsync 异步返回引用特定类或实例的所有关联类或实例的集合。
SubclassesOf 从 CIM 存储库检索指定类的所有子类。
SubclassesOfAsync 异步返回指定类的子类的集合。

属性

SWbemServices 对象具有以下属性。

属性 访问类型 说明
Security_
只读
用于获取或设置 SWbemServices 对象的安全设置。

注解

可以在同步模式、异步模式或半异步模式下调用这些方法。 有关详细信息,请参阅 调用方法

概述

SWbemServices 提供两个主要角色。 首先, SWbemServices 对象表示与目标计算机上的 WMI 命名空间的经过身份验证的连接。 其次, SWbemServices 是用于检索 WMI 托管资源的自动化对象。 可以通过以下两种方式之一获取对 SWbemServices 对象的引用:

  • 如到目前为止介绍的大部分 WMI 脚本所示,可以将 VBScript GetObject 函数与 WMI 名字对象“winmgmts:”结合使用。 以下示例是 WMI 连接的最简单形式。 该示例连接到本地计算机上的默认命名空间 (通常为“Root\CIMv2”) :

    Set objSWbemServices = GetObject("winmgmts:")

  • 还可以使用 SWbemLocator 对象 ConnectServer 方法获取对 SWbemServices 对象的引用。

获取对 SWbemServices 对象的引用后,可以使用对象引用调用 18 个可用 SWbemServices 方法中的 1 个。 SWbemServices 可以返回三个不同的 WMI 脚本库对象之一, (SWbemObjectSet、SWbemObjectSWbemEventSource) ,具体取决于调用的方法。 了解每个方法返回的对象类型将有助于确定脚本必须执行的下一步。 例如,如果返回 SWbemObjectSet,则必须枚举该集合以访问集合中的每个 SWbemObject 。 如果返回 SWbemObject,则可以立即访问对象方法和属性,而无需先枚举集合。

操作模式

SWbemServices 支持三种操作模式:同步、异步和半异步。

  • Synchronous。 在同步模式下,脚本会阻止 (暂停) ,直到 SWbemServices 方法完成。 脚本不仅会等待,而且在 WMI 检索托管资源的实例的情况下,WMI 在将数据第一个字节返回到调用脚本之前,在内存中生成整个 SWbemObjectSet 。 这可能会对脚本性能和运行脚本的计算机上产生不利影响。 例如,从Windows事件日志中同步检索数千个事件可能需要很长时间并使用大量内存。 出于这些原因,建议不要使用同步操作,除非默认同步的三种方法 (DeleteExecMethodGet) 。 这些方法不返回大型数据集,因此不需要执行半异步操作。

  • 异步。 在异步模式下,脚本调用九种异步方法之一并立即返回。 也就是说,只要调用异步方法,脚本就会继续运行下一行代码。 若要使用异步方法,脚本必须首先创建 SWbemSink 对象和一个名为事件处理程序的特殊子例程。 WMI 执行异步操作,并在操作完成后调用事件处理程序子例程来通知脚本。

  • 半异步。 半异步模式是同步和异步之间的妥协。 半异步操作的性能优于同步操作,但它们不需要处理异步操作所需的额外知识和脚本步骤。 这是大多数 WMI 查询的默认操作类型。

    在半异步模式下,脚本调用六种数据检索方法之一并立即返回。 WMI 在后台检索托管资源,因为脚本继续运行。 检索资源时,它们会立即通过 SWbemObjectSet 返回到脚本。 可以开始访问托管资源,而无需等待整个集合进行组装。

    使用托管资源时,需要注意的是,在使用托管资源时, (多个实例,这意味着大于 1,000) ,例如 CIM_DataFileWin32_NTLogEvent。 注意事项是 WMI 如何处理托管资源的实例的结果。 对于托管资源的每个实例,WMI 会创建并缓存 SWbemObject 对象。 当托管资源存在大量实例时,实例检索可以垄断可用资源,从而减少脚本和计算机的性能。

    若要解决此问题,可以使用 wbemFlagForwardOnly 标志优化半异步方法调用。 wbemFlagForwardOnly 标志与 wbemFlagReturnImmediately 标志结合使用, (默认半异步标志) ,指示 WMI 返回仅前向 SWbemObjectSet,这消除了大型数据集性能问题。 但是,使用 wbemFlagForwardOnly 标志需要成本。 仅可枚举一次仅向前 SWbemObjectSet 。 访问仅向前 SWbemObjectSet 中的每个 SWbemObject 后,将释放分配给实例的内存。

除了 DeleteExecMethodGet 和 9 个异步方法之外,半异步是默认和建议的操作模式。

常用方法

系统管理脚本中最常用的方法是 InstancesOfExecQueryGetExecNotificationQuery。 尽管经常使用,但 InstancesOf 不一定是检索信息 (的建议方法,尽管这可以说是最简单的) 方法。

要求

要求
最低受支持的客户端
Windows Vista
最低受支持的服务器
Windows Server 2008
标头
Wbemdisp.h
类型库
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

另请参阅

编写 API 对象的脚本

调用方法