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 并检索基本系统详细信息。脚本输出操作系统名称、版本和内部版本号。
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。
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 类以获取磁盘信息。脚本计算每个磁盘的可用空间百分比。
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 服务。它演示了列出服务和更改其状态。脚本可以根据其当前状态启动或停止服务。
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 温度。请注意,并非所有系统都支持此功能。该脚本展示了在查询专用硬件信息时如何处理潜在的错误。
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 用法。
来源
在本文中,我们探讨了 VBScript 中的 winmgmts
对象,涵盖了其用法和实际应用。从系统信息到硬件监视,这些示例展示了强大的 WMI 功能。通过这些知识,您可以创建高级系统管理脚本。