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、SWbemObject 或 SWbemEventSource) ,具体取决于调用的方法。 了解每个方法返回的对象类型将有助于确定脚本必须执行的下一步。 例如,如果返回 SWbemObjectSet,则必须枚举该集合以访问集合中的每个 SWbemObject 。 如果返回 SWbemObject,则可以立即访问对象方法和属性,而无需先枚举集合。
操作模式
SWbemServices 支持三种操作模式:同步、异步和半异步。
Synchronous。 在同步模式下,脚本会阻止 (暂停) ,直到 SWbemServices 方法完成。 脚本不仅会等待,而且在 WMI 检索托管资源的实例的情况下,WMI 在将数据第一个字节返回到调用脚本之前,在内存中生成整个 SWbemObjectSet 。 这可能会对脚本性能和运行脚本的计算机上产生不利影响。 例如,从Windows事件日志中同步检索数千个事件可能需要很长时间并使用大量内存。 出于这些原因,建议不要使用同步操作,除非默认同步的三种方法 (Delete、 ExecMethod 和 Get) 。 这些方法不返回大型数据集,因此不需要执行半异步操作。
异步。 在异步模式下,脚本调用九种异步方法之一并立即返回。 也就是说,只要调用异步方法,脚本就会继续运行下一行代码。 若要使用异步方法,脚本必须首先创建 SWbemSink 对象和一个名为事件处理程序的特殊子例程。 WMI 执行异步操作,并在操作完成后调用事件处理程序子例程来通知脚本。
半异步。 半异步模式是同步和异步之间的妥协。 半异步操作的性能优于同步操作,但它们不需要处理异步操作所需的额外知识和脚本步骤。 这是大多数 WMI 查询的默认操作类型。
在半异步模式下,脚本调用六种数据检索方法之一并立即返回。 WMI 在后台检索托管资源,因为脚本继续运行。 检索资源时,它们会立即通过 SWbemObjectSet 返回到脚本。 可以开始访问托管资源,而无需等待整个集合进行组装。
使用托管资源时,需要注意的是,在使用托管资源时, (多个实例,这意味着大于 1,000) ,例如 CIM_DataFile 和 Win32_NTLogEvent。 注意事项是 WMI 如何处理托管资源的实例的结果。 对于托管资源的每个实例,WMI 会创建并缓存 SWbemObject 对象。 当托管资源存在大量实例时,实例检索可以垄断可用资源,从而减少脚本和计算机的性能。
若要解决此问题,可以使用 wbemFlagForwardOnly 标志优化半异步方法调用。 wbemFlagForwardOnly 标志与 wbemFlagReturnImmediately 标志结合使用, (默认半异步标志) ,指示 WMI 返回仅前向 SWbemObjectSet,这消除了大型数据集性能问题。 但是,使用 wbemFlagForwardOnly 标志需要成本。 仅可枚举一次仅向前 SWbemObjectSet 。 访问仅向前 SWbemObjectSet 中的每个 SWbemObject 后,将释放分配给实例的内存。
除了 Delete、 ExecMethod、 Get 和 9 个异步方法之外,半异步是默认和建议的操作模式。
常用方法
系统管理脚本中最常用的方法是 InstancesOf、 ExecQuery、 Get 和 ExecNotificationQuery。 尽管经常使用,但 InstancesOf 不一定是检索信息 (的建议方法,尽管这可以说是最简单的) 方法。
要求
要求 | 值 |
---|---|
最低受支持的客户端 |
Windows Vista |
最低受支持的服务器 |
Windows Server 2008 |
标头 |
|
类型库 |
|
DLL |
|
CLSID |
CLSID_SWbemServices |
IID |
IID_ISWbemServices |