SWbemServices 对象

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

成员

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

方法

SWbemServices 对象具有以下方法。

方法 说明
AssociatorsOf 通过一个或多个关联类检索与指定资源关联的托管资源的实例。 提供原始终结点的对象路径,AssociatorsOf 返回相反终结点处的托管资源。 AssociatorsOf 方法执行的函数与 ASSOCIATORS OF WQL 查询执行的函数相同。
AssociatorsOfAsync 异步返回与指定对象关联的对象(类或实例)的集合。
Delete 从 CIM 存储库中删除托管资源的实例(或类定义)。
DeleteAsync 异步删除对象路径中指定的类或实例。
ExecMethod 提供一种备用方式来执行由托管资源类定义定义的方法。 主要用于脚本语言不支持 out 参数的情况。 例如,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 对象的引用后,可以使用对象引用调用使用 SWbemServices 提供的 18 种方法之一。 SWbemServices 可以返回三个不同的 WMI 脚本库对象之一(SWbemObjectSetSWbemObjectSWbemEventSource),具体取决于调用的方法。 了解每个方法返回的对象类型将有助于确定脚本必须执行的下一步。 例如,如果取回 SWbemObjectSet,则必须枚举该集合才能访问集合中的每个 SWbemObject。 如果取回 SWbemObject,则可以立即访问对象方法和属性,而无需先枚举集合。

操作模式

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

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

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

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

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

    在使用具有多个实例的托管资源时,需要注意的是半同步操作,这些资源具有许多实例(“许多”表示超过 1000 个),例如 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 对象

调用方法