VBScript AssociatorsOf 方法
最后修改于 2025 年 4 月 9 日
VBScript 中的 `AssociatorsOf` 方法是 Windows Management Instrumentation (WMI) 基础设施的一部分。它通过 WMI 关联检索与指定源对象相关联的对象。此方法对于探索系统组件之间的关系非常强大。
`AssociatorsOf` 有助于在 WMI 中导航复杂的对象关系。它返回与源对象相关的对象的集合。本教程通过实际示例涵盖 `AssociatorsOf`,以演示其在系统管理和监控中的用法。
AssociatorsOf 方法概述
`AssociatorsOf` 方法查询 WMI 以获取相关对象。它接受多个参数来优化关联搜索。这些参数包括关联类、结果类和角色过滤器。该方法返回一个 SWbemObjectSet 集合。
关键参数包括源对象路径和可选限定符。它可以按关联类型或结果类进行筛选。`AssociatorsOf` 可通过 WMI 脚本中的 SWbemServices 对象获得。理解此方法有助于创建高级系统管理脚本。
基本关联查询
此示例演示了 `AssociatorsOf` 的最简单用法,用于查找相关对象。它展示了如何检索与特定进程相关联的服务。该脚本连接到 WMI 并查询 Notepad.exe 的关联。
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name='notepad.exe'") For Each objProcess in colProcesses Set colServices = objProcess.Associators_() WScript.Echo "Services associated with Notepad:" For Each objService in colServices WScript.Echo objService.Name Next Next
该脚本连接到 WMI 并查询 Notepad 进程。然后,它对每个进程调用 `Associators_`(AssociatorsOf 的缩写)。该方法返回相关服务,没有任何过滤器。这展示了 WMI 中的基本关联导航。
按关联类筛选
此示例演示了按类筛选关联。它只检索特定类型的相关对象。该脚本使用 Win32_DiskDriveToDiskPartition 类查找与特定分区相关联的磁盘驱动器。
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colPartitions = objWMIService.ExecQuery("SELECT * FROM Win32_DiskPartition WHERE Index=0") For Each objPartition in colPartitions Set colDrives = objPartition.Associators_("Win32_DiskDriveToDiskPartition") WScript.Echo "Disk drives for partition 0:" For Each objDrive in colDrives WScript.Echo objDrive.Caption & " - " & objDrive.DeviceID Next Next
该脚本查询分区 0,并调用带有特定关联类的 `Associators_`。这将结果筛选为仅通过该关系连接的磁盘驱动器。输出显示了与该分区相关的物理驱动器。
指定结果类
此示例显示如何按返回对象的类筛选结果。它只检索与进程相关联的服务,忽略其他类型。结果类参数确保只返回 Win32_Service 对象。
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name='svchost.exe'") For Each objProcess in colProcesses Set colServices = objProcess.Associators_(, "Win32_Service") WScript.Echo "Services hosted by svchost:" For Each objService in colServices WScript.Echo objService.DisplayName & " (" & objService.Name & ")" Next Next
该脚本查询 svchost 进程,并且只请求 Win32_Service 关联对象。第一个空参数表示没有关联类过滤器。第二个参数指定所需的结果类。这会将结果集中在托管服务上。
使用 Role 参数
此示例演示了 Role 参数用于指定关系方向。它查找使用特定 DLL 文件的进程。Role 参数标识了 DLL 在关联中的作用。
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colFiles = objWMIService.ExecQuery("SELECT * FROM CIM_DataFile WHERE Name='C:\\Windows\\System32\\kernel32.dll'") For Each objFile in colFiles Set colProcesses = objFile.Associators_(, "Win32_Process", "Dependent") WScript.Echo "Processes using kernel32.dll:" For Each objProcess in colProcesses WScript.Echo objProcess.Name & " (PID: " & objProcess.ProcessId & ")" Next Next
该脚本定位 kernel32.dll 并查询依赖的进程。"Dependent" Role 参数指定了 DLL 在关系中的作用。这会返回依赖(使用)该 DLL 的进程,而不是其他关联方向。
完整参数使用
此示例展示了所有主要参数的组合使用。它检索与计算机系统相关联的网络适配器,并带有特定过滤器。该查询演示了对关联导航的全面控制。
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colSystems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem") For Each objSystem in colSystems Set colAdapters = objSystem.Associators_("Win32_SystemDevices", "Win32_NetworkAdapter", "PartComponent") WScript.Echo "Network adapters for this computer:" For Each objAdapter in colAdapters WScript.Echo objAdapter.Name & " - " & objAdapter.MACAddress Next Next
该脚本查询计算机系统并查找相关的网络适配器。它指定了关联类、结果类和角色。此精确查询仅返回通过 Win32_SystemDevices 关系作为组件连接的网络适配器。
来源
在本文中,我们探讨了 VBScript 中的 `AssociatorsOf` 方法,涵盖了其用法和实际应用。从基本关联查询到复杂的筛选关系,这些示例展示了强大的 WMI 导航。通过这些知识,您可以创建高级系统管理脚本。