ZetCode

VBScript Win32_StartupCommand 类

最后修改于 2025 年 4 月 9 日

VBScript 中的 Win32_StartupCommand 类是 Windows Management Instrumentation (WMI) 的一部分。它提供了有关系统启动或用户登录时自动运行的程序的信息。此类对于系统管理和安全审计非常有用。

Win32_StartupCommand 可揭示来自注册表和启动文件夹等各种位置的启动项。它有助于识别潜在的恶意自动运行程序。本教程通过实际示例涵盖了该类,以演示其用法。

Win32_StartupCommand 类概述

Win32_StartupCommand 类包含描述每个启动命令的属性。关键属性包括 CommandLocationNameUser。这些属性揭示了运行的内容、配置位置以及针对哪个用户。

该类涵盖了来自多个位置的启动项:注册表运行键、启动文件夹和计划任务。它提供了所有自动运行程序的统一视图。了解此类有助于管理系统启动行为。

列出所有启动命令

此基本示例演示了如何查询系统上的所有启动命令。它连接到 WMI,执行查询并显示结果。将显示每个启动项的名称、命令和位置。

list_startup_commands.vbs
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colStartupCommands = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_StartupCommand")

For Each objStartup In colStartupCommands
    WScript.Echo "Name: " & objStartup.Name
    WScript.Echo "Command: " & objStartup.Command
    WScript.Echo "Location: " & objStartup.Location
    WScript.Echo "User: " & objStartup.User
    WScript.Echo "--------------------------------"
Next

脚本使用 GetObject 和适当的命名空间连接到 WMI。它查询 Win32_StartupCommand 的所有实例。循环遍历结果,显示每个条目的关键属性。

按位置过滤启动命令

此示例显示如何按位置过滤启动命令。它仅查询来自特定启动位置的条目。WQL 查询中的 WHERE 子句支持此过滤功能。

filter_by_location.vbs
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colStartupCommands = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_StartupCommand WHERE Location LIKE '%Startup%'")

WScript.Echo "Startup Folder Entries:"
WScript.Echo "======================="

For Each objStartup In colStartupCommands
    WScript.Echo "Name: " & objStartup.Name
    WScript.Echo "Path: " & objStartup.Command
    WScript.Echo "--------------------------------"
Next

脚本过滤位置中包含“Startup”的条目。这会将目标指向从用户启动文件夹启动的程序。LIKE 运算符允许在 WQL 查询中进行模式匹配。仅处理匹配的条目。

查找特定用户的启动命令

此示例演示如何查询特定用户帐户的启动命令。它使用 User 属性过滤结果。这有助于识别用户特定的自动运行程序。

user_specific_startup.vbs
targetUser = "DOMAIN\username"

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colStartupCommands = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_StartupCommand WHERE User = '" & targetUser & "'")

WScript.Echo "Startup commands for user " & targetUser & ":"
WScript.Echo "===================================="

For Each objStartup In colStartupCommands
    WScript.Echo "Name: " & objStartup.Name
    WScript.Echo "Location: " & objStartup.Location
    WScript.Echo "Command: " & objStartup.Command
    WScript.Echo "--------------------------------"
Next

脚本定义目标用户并将其包含在 WQL 查询中。仅返回为该用户配置的启动项。请将“DOMAIN\username”替换为实际要调查的用户。这对于用户配置文件管理很有用。

检查特定的启动程序

此示例检查是否已配置特定程序在启动时运行。它搜索匹配程序名称模式的条目。这有助于检测可能不需要的自动运行程序。

check_specific_program.vbs
programName = "malware.exe"

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colStartupCommands = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_StartupCommand WHERE Command LIKE '%" & programName & "%'")

If colStartupCommands.Count > 0 Then
    WScript.Echo "Found " & colStartupCommands.Count & " startup entries for " & programName
    For Each objStartup In colStartupCommands
        WScript.Echo "Location: " & objStartup.Location
        WScript.Echo "User: " & objStartup.User
    Next
Else
    WScript.Echo "No startup entries found for " & programName
End If

脚本搜索任何包含指定程序名称的启动命令。带有通配符 (%) 的 LIKE 运算符支持部分匹配。结果将指示程序是否配置为自动运行以及在何处运行。这对于安全审计很有用。

将启动命令导出到 CSV 文件

此高级示例将所有启动命令导出到 CSV 文件。它创建一个包含所有相关属性的结构化报告。脚本演示了文件处理与 WMI 查询的结合。

export_to_csv.vbs
outputFile = "C:\temp\startup_commands.csv"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile(outputFile, True)

objFile.WriteLine "Name,Command,Location,User"

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colStartupCommands = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_StartupCommand")

For Each objStartup In colStartupCommands
    line = """" & objStartup.Name & ""","
    line = line & """" & objStartup.Command & ""","
    line = line & """" & objStartup.Location & ""","
    line = line & """" & objStartup.User & """"
    objFile.WriteLine line
Next

objFile.Close
WScript.Echo "Startup commands exported to " & outputFile

脚本创建一个 CSV 文件并写入标题行。然后,它查询所有启动命令,并将每个命令作为格式正确的 CSV 行写入。引号用于处理数据字段中的逗号。结果是所有启动项的可电子表格报告。

来源

Win32_StartupCommand 文档

在本文中,我们探讨了 VBScript 中的 Win32_StartupCommand 类,涵盖了其用法和实际应用。从基本列表到高级过滤和报告,这些示例演示了强大的启动程序管理。通过这些知识,您可以更好地控制和审计系统的自动运行行为。

作者

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

列出所有 VBScript 教程