ZetCode

VBScript winmgmts 对象

最后修改于 2025 年 4 月 9 日

VBScript 中的 winmgmts 对象提供了对 Windows Management Instrumentation (WMI) 的访问。它允许脚本查询和管理系统资源。WMI 提供了一种与 Windows 系统组件交互的标准方法。此对象对于 VBScript 中的系统管理任务至关重要。

winmgmts 可以检索硬件信息、管理服务和监控性能。它通过 WMI 连接到本地或远程计算机。本教程将通过实际示例介绍 winmgmts,以展示其强大的功能。

winmgmts 对象概述

winmgmts 对象是一个别名,用于创建 WMI 连接。它提供了对 WMI 命名空间、类和实例的访问。该对象支持使用 WQL (WMI 查询语言) 进行系统信息查询。

主要功能包括硬件清单、进程管理和事件监视。在提供适当的凭据时,它可以与本地和远程系统配合使用。理解此对象可以创建强大的系统管理脚本。

基本系统信息查询

此示例演示了一个简单的 WMI 查询,用于获取操作系统信息。它展示了如何连接到 WMI 并检索基本系统详细信息。脚本输出操作系统名称、版本和内部版本号。

basic_wmi_query.vbs
Set wmi = GetObject("winmgmts:\\.\root\cimv2")
Set os = wmi.ExecQuery("Select * from Win32_OperatingSystem")

For Each item in os
    WScript.Echo "OS Name: " & item.Caption
    WScript.Echo "Version: " & item.Version
    WScript.Echo "Build: " & item.BuildNumber
Next

Set os = Nothing
Set wmi = Nothing

脚本连接到默认 WMI 命名空间 (root\cimv2)。它查询包含操作系统信息的 Win32_OperatingSystem 类。结果使用简单的循环显示。这展示了基本的 WMI 交互。

列出正在运行的进程

此示例演示了如何检索正在运行的进程列表。它演示了查询 Win32_Process WMI 类。脚本显示进程名称及其进程 ID。

list_processes.vbs
Set wmi = GetObject("winmgmts:\\.\root\cimv2")
Set processes = wmi.ExecQuery("Select * from Win32_Process")

WScript.Echo "Running Processes:"
WScript.Echo "------------------"

For Each proc in processes
    WScript.Echo proc.Name & " (PID: " & proc.ProcessID & ")"
Next

Set processes = Nothing
Set wmi = Nothing

脚本连接到 WMI 并查询 Win32_Process 类。每个进程对象包含 Name 和 ProcessID 等属性。结果经过格式化并显示。这对于进程监视和管理非常有用。

检查磁盘空间

此示例演示了如何使用 WMI 检查磁盘空间。它查询 Win32_LogicalDisk 类以获取磁盘信息。脚本计算每个磁盘的可用空间百分比。

disk_space.vbs
Set wmi = GetObject("winmgmts:\\.\root\cimv2")
Set disks = wmi.ExecQuery("Select * from Win32_LogicalDisk Where DriveType = 3")

WScript.Echo "Disk Space Information:"
WScript.Echo "----------------------"

For Each disk in disks
    freeSpace = Round(disk.FreeSpace / 1073741824, 2)
    totalSpace = Round(disk.Size / 1073741824, 2)
    percentFree = Round((disk.FreeSpace / disk.Size) * 100, 2)
    
    WScript.Echo "Drive " & disk.DeviceID & ":"
    WScript.Echo "  Free: " & freeSpace & " GB"
    WScript.Echo "  Total: " & totalSpace & " GB"
    WScript.Echo "  % Free: " & percentFree & "%"
Next

Set disks = Nothing
Set wmi = Nothing

脚本过滤固定磁盘 (DriveType = 3)。它将字节转换为 GB 以便阅读。计算并显示可用空间百分比。这有助于在自动化脚本中监视磁盘使用情况。

管理 Windows 服务

此示例演示了如何查询和控制 Windows 服务。它演示了列出服务和更改其状态。脚本可以根据其当前状态启动或停止服务。

manage_services.vbs
Set wmi = GetObject("winmgmts:\\.\root\cimv2")
Set services = wmi.ExecQuery("Select * from Win32_Service Where Name = 'Spooler'")

For Each svc in services
    WScript.Echo "Service: " & svc.Name
    WScript.Echo "Display Name: " & svc.DisplayName
    WScript.Echo "Status: " & svc.State
    
    If svc.State = "Running" Then
        WScript.Echo "Stopping service..."
        svc.StopService()
    Else
        WScript.Echo "Starting service..."
        svc.StartService()
    End If
Next

Set services = Nothing
Set wmi = Nothing

脚本以打印假脱机服务为例进行查询。它检查当前状态并进行切换。演示了 StartService 和 StopService 等服务控制方法。这对于服务管理脚本很有用。

监视 CPU 温度

这个高级示例演示了通过 WMI 读取 CPU 温度。请注意,并非所有系统都支持此功能。该脚本展示了在查询专用硬件信息时如何处理潜在的错误。

cpu_temperature.vbs
On Error Resume Next

Set wmi = GetObject("winmgmts:\\.\root\wmi")
Set temps = wmi.ExecQuery("Select * from MSAcpi_ThermalZoneTemperature")

If Err.Number <> 0 Then
    WScript.Echo "Error accessing temperature data: " & Err.Description
    WScript.Quit
End If

WScript.Echo "CPU Temperature Readings:"
WScript.Echo "-----------------------"

For Each temp in temps
    celsius = (temp.CurrentTemperature / 10) - 273.15
    WScript.Echo "Current Temperature: " & Round(celsius, 1) & "°C"
Next

If temps.Count = 0 Then
    WScript.Echo "No temperature sensors found"
End If

Set temps = Nothing
Set wmi = Nothing

脚本连接到 WMI root\wmi 命名空间以获取硬件数据。它将温度从开尔文转换为摄氏度。错误处理确保在不支持的系统上优雅地失败。这展示了高级 WMI 用法。

来源

Windows WMI 文档

在本文中,我们探讨了 VBScript 中的 winmgmts 对象,涵盖了其用法和实际应用。从系统信息到硬件监视,这些示例展示了强大的 WMI 功能。通过这些知识,您可以创建高级系统管理脚本。

作者

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

列出所有 VBScript 教程