ZetCode

VBScript Win32_Process 类

最后修改于 2025 年 4 月 9 日

VBScript 中的 Win32_Process 类通过 WMI 提供对 Windows 进程管理的访问。它允许在本地或远程系统上查询、创建和终止进程。此类是 Windows Management Instrumentation (WMI) 基础结构的一部分。它提供了丰富的进程相关信息和控制功能。

Win32_Process 使系统管理员能够自动化进程管理任务。它可以检索详细的进程属性,如内存使用情况、执行时间和命令行参数。本教程将通过实际示例介绍 Win32_Process 的用法。

Win32_Process 类概述

Win32_Process 类代表 Windows 系统上的一个进程。它包含 ProcessId、Name、ExecutablePath 和 CommandLine 等属性。方法包括用于启动进程的 Create 和用于停止进程的 Terminate。

主要功能包括远程管理和详细的进程统计信息。该类需要通过 `GetObject` 和 "winmgmts:" 别名来连接 WMI。理解此类有助于创建健壮的进程管理脚本。

列出所有正在运行的进程

此示例演示了如何列出系统上所有正在运行的进程。它展示了基本的 WMI 连接设置和进程枚举。脚本检索所有活动进程的进程名称和 ID。

list_processes.vbs
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * From Win32_Process")

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

脚本连接到 WMI 服务并查询所有 Win32_Process 实例。然后它遍历集合,显示每个进程的名称和 ID。这提供了类似于任务管理器进程选项卡的(基本)进程列表。

创建新进程

此示例展示了如何使用 Win32_Process 创建新进程。它会启动记事本(Notepad.exe)并带有指定的参数。Create 方法返回进程 ID 和执行状态。

create_process.vbs
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set objProcess = objWMIService.Get("Win32_Process")
strCommand = "notepad.exe C:\temp\notes.txt"

intReturn = objProcess.Create(strCommand, Null, Null, intProcessID)

If intReturn = 0 Then
    WScript.Echo "Process created with ID: " & intProcessID
Else
    WScript.Echo "Process creation failed. Error: " & intReturn
End If

脚本连接到 WMI 并获取 Win32_Process 类。它调用 Create 并传入要执行的命令行。该方法成功时返回 0,并将进程 ID 填充到变量中。错误代码表示各种失败情况。

按 ID 终止进程

此示例演示了如何按进程 ID 终止进程。它展示了如何强制结束正在运行的进程。Terminate 方法会立即停止执行。

terminate_process.vbs
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * From Win32_Process Where ProcessId = 1234")

For Each objProcess in colProcesses
    intReturn = objProcess.Terminate(0)
    If intReturn = 0 Then
        WScript.Echo "Process terminated successfully"
    Else
        WScript.Echo "Failed to terminate process. Error: " & intReturn
    End If
Next

脚本查询特定的进程 ID(将 1234 替换为实际 ID)。它在匹配的进程上调用 Terminate。该方法成功时返回 0。这种方法可以精确地终止进程而不会影响其他进程。

获取进程内存使用情况

此示例检索所有进程的内存使用情况信息。它展示了如何访问与性能相关的属性。脚本显示工作集大小和虚拟内存使用情况。

process_memory.vbs
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * From Win32_Process")

For Each objProcess in colProcesses
    WScript.Echo "Process: " & objProcess.Name
    WScript.Echo "  Working Set: " & objProcess.WorkingSetSize & " bytes"
    WScript.Echo "  Virtual Size: " & objProcess.VirtualSize & " bytes"
Next

脚本枚举所有进程并显示内存统计信息。WorkingSetSize 显示物理内存使用情况。VirtualSize 指示已分配的虚拟内存。这些指标有助于识别资源密集型进程。

按名称查找进程

此示例演示了如何按可执行文件名搜索进程。它使用带有 WHERE 子句的 WQL 查询来过滤结果。脚本查找指定进程的所有实例。

find_process.vbs
strProcessName = "chrome.exe"
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * From Win32_Process Where Name = '" & strProcessName & "'")

WScript.Echo "Found " & colProcesses.Count & " instances of " & strProcessName
For Each objProcess in colProcesses
    WScript.Echo "  PID: " & objProcess.ProcessId & ", Path: " & objProcess.ExecutablePath
Next

脚本搜索与指定名称(chrome.exe)匹配的进程。它显示匹配项的数量和每个实例的详细信息。ExecutablePath 显示进程二进制文件的完整路径。这有助于识别同一应用程序的多个实例。

来源

Win32_Process 类文档

在本文中,我们探讨了 VBScript 中的 Win32_Process 类,涵盖了其用法和实际应用。从列出进程到创建和终止,这些示例展示了强大的进程管理功能。通过这些知识,您可以为系统管理脚本添加强大的进程控制功能。

作者

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

列出所有 VBScript 教程