ZetCode

VBScript InstancesOf 方法

最后修改于 2025 年 4 月 9 日

VBScript 中的 InstancesOf 方法是 Windows Management Instrumentation (WMI) 接口的一部分。它会查询 WMI 以获取指定类的所有实例。此方法返回一个符合查询条件的对象的集合。它通常用于系统管理和监控任务。

InstancesOf 提供了对硬件、软件和系统信息的访问。它通过 WMI 实现了强大的系统管理功能。本教程将通过实际示例介绍 InstancesOf 的用法,以演示其在各种场景下的应用。

InstancesOf 方法概述

InstancesOf 方法在 WMI 服务对象上调用。它接受一个参数:要查询的 WMI 类名。该方法返回一个 SWbemObject 实例的集合,代表被查询的对象。

主要功能包括访问系统信息和硬件详细信息。它需要适当的 WMI 权限才能成功执行。正确配置后,InstancesOf 可用于本地和远程系统。

基本进程枚举

此示例演示了使用 InstancesOf 查询正在运行的进程。它展示了如何检索基本的进程信息。该脚本连接到 WMI 并查询 Win32_Process 类。

basic_processes.vbs
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colProcesses = objWMIService.InstancesOf("Win32_Process")

For Each objProcess in colProcesses
    WScript.Echo "Process: " & objProcess.Name & " (ID: " & objProcess.ProcessId & ")"
Next

该脚本连接到本地 WMI 服务并查询所有进程。然后,它遍历集合,显示每个进程的名称和 ID。这是 WMI 数据检索的一个基础示例。

查询磁盘驱动器

此示例展示了如何检索物理磁盘驱动器的信息。它演示了查询 Win32_DiskDrive 类。该脚本显示每个已安装磁盘的基本驱动器属性。

disk_drives.vbs
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colDisks = objWMIService.InstancesOf("Win32_DiskDrive")

For Each objDisk in colDisks
    WScript.Echo "Model: " & objDisk.Model
    WScript.Echo "Size: " & Round(objDisk.Size/1073741824, 2) & " GB"
    WScript.Echo "Interface: " & objDisk.InterfaceType
    WScript.Echo "---"
Next

该脚本连接到 WMI 并查询磁盘驱动器信息。它显示每个驱动器的型号、大小(转换为 GB)和接口类型。此示例展示了实际的硬件信息检索。

检查已安装软件

此示例演示了使用 Win32_Product 类查询已安装的软件。它展示了如何检索软件名称和版本。该脚本提供了基本的软件清单功能。

installed_software.vbs
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colSoftware = objWMIService.InstancesOf("Win32_Product")

For Each objProduct in colSoftware
    WScript.Echo "Name: " & objProduct.Name
    WScript.Echo "Version: " & objProduct.Version
    WScript.Echo "Vendor: " & objProduct.Vendor
    WScript.Echo "---"
Next

该脚本通过 WMI 查询所有已安装的软件产品。它显示每个产品的名称、版本和供应商。请注意,在安装了大量应用程序的系统上,此查询可能很慢。

监控网络适配器

此示例展示了如何检索网络适配器信息。它查询 Win32_NetworkAdapterConfiguration 类。该脚本显示每个网络适配器的 IP 配置详细信息。

network_adapters.vbs
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colAdapters = objWMIService.InstancesOf("Win32_NetworkAdapterConfiguration")

For Each objAdapter in colAdapters
    If Not IsNull(objAdapter.IPAddress) Then
        WScript.Echo "Description: " & objAdapter.Description
        WScript.Echo "IP Address: " & Join(objAdapter.IPAddress, ", ")
        WScript.Echo "Subnet Mask: " & Join(objAdapter.IPSubnet, ", ")
        WScript.Echo "---"
    End If
Next

该脚本检索所有网络适配器配置。它进行筛选,仅显示分配了 IP 地址的适配器。Join 函数组合了数组值,以便更清晰地输出多个 IP 地址。

检查系统 BIOS 信息

最后一个示例演示了查询 BIOS 信息。它使用 Win32_BIOS 类检索系统 BIOS 详细信息。该脚本显示版本、制造商和发布日期。

bios_info.vbs
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colBIOS = objWMIService.InstancesOf("Win32_BIOS")

For Each objBIOS in colBIOS
    WScript.Echo "Manufacturer: " & objBIOS.Manufacturer
    WScript.Echo "Version: " & objBIOS.Version
    WScript.Echo "Release Date: " & objBIOS.ReleaseDate
    WScript.Echo "SMBIOS Version: " & objBIOS.SMBIOSBIOSVersion
Next

该脚本从系统检索 BIOS 信息。它显示有关 BIOS 固件的关键详细信息。此示例展示了如何通过 WMI 访问底层系统信息。

来源

WMI InstancesOf 文档

在本文中,我们探讨了 VBScript 中的 InstancesOf 方法,涵盖了它的用法和实际应用。从进程监控到硬件清单,这些示例展示了强大的系统管理功能。通过这些知识,您可以使用 WMI 创建强大的管理脚本。

作者

我叫 Jan Bodnar,是一名充满激情的程序员,拥有多年的编程经验。自 2007 年以来,我一直在撰写编程文章。到目前为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有八年以上的经验。

列出所有 VBScript 教程