ZetCode

VBScript Win32_Service 类

最后修改于 2025 年 4 月 9 日

VBScript 中的 Win32_Service 类通过 WMI (Windows Management Instrumentation) 提供对 Windows 服务管理的访问。它允许查询、启动、停止和配置 Windows 服务。此类是 WMI 基础结构的一部分,需要适当的权限才能使用。

Win32_Service 提供对系统服务的全面控制。它可以检索有关已安装服务的详细信息。本教程将通过实际示例介绍 Win32_Service,以演示其在系统管理脚本中的用法。

Win32_Service 类概述

Win32_Service 类代表本地或远程计算机上的 Windows 服务。它包含 Name、DisplayName、State 和 StartMode 等属性。方法包括 StartService、StopService 和 ChangeStartMode。

主要功能包括服务状态监视和配置更改。大多数操作需要管理员权限。此类可同时访问系统服务和应用程序服务。了解此类有助于自动化服务管理任务。

列出所有服务

此示例演示如何使用 Win32_Service 列出系统上的所有服务。它检索每项服务的基本信息。脚本连接到 WMI 并查询 Win32_Service 类。

list_services.vbs
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecQuery("Select * from Win32_Service")

For Each objService in colServices
    WScript.Echo "Name: " & objService.Name & vbCrLf & _
                 "Display Name: " & objService.DisplayName & vbCrLf & _
                 "State: " & objService.State & vbCrLf & _
                 "Start Mode: " & objService.StartMode & vbCrLf
Next

脚本连接到本地 WMI 服务并查询所有 Win32_Service 实例。然后,它遍历每个服务,显示其 Name、DisplayName、State 和 StartMode。这提供了所有服务的全面视图。

检查服务状态

此示例显示如何检查特定服务的状态。它按名称查询 Win32_Service 类以获取服务。脚本演示在采取操作之前进行服务状态验证。

check_service.vbs
strServiceName = "Spooler"
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecQuery("Select * from Win32_Service Where Name='" & strServiceName & "'")

For Each objService in colServices
    WScript.Echo "Service: " & objService.DisplayName & vbCrLf & _
                 "State: " & objService.State & vbCrLf & _
                 "Start Mode: " & objService.StartMode
Next

脚本检查打印后台处理程序服务的状态。它使用带有 WHERE 子句的 WQL 查询来过滤特定服务。输出显示服务的当前状态和启动模式。

启动服务

此示例演示如何使用 StartService 方法启动已停止的服务。它首先检查服务状态,然后在服务停止时启动它。脚本包含错误处理以提高健壮性。

start_service.vbs
strServiceName = "Spooler"
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecQuery("Select * from Win32_Service Where Name='" & strServiceName & "'")

For Each objService in colServices
    If objService.State = "Stopped" Then
        errReturn = objService.StartService()
        If errReturn = 0 Then
            WScript.Echo "Service started successfully"
        Else
            WScript.Echo "Failed to start service. Error: " & errReturn
        End If
    Else
        WScript.Echo "Service is already running"
    End If
Next

脚本尝试在打印后台处理程序服务停止时启动它。它检查 StartService 的返回代码以验证是否成功。如果操作失败,错误处理会提供反馈。此模式对于服务管理脚本很有用。

停止服务

此示例显示如何使用 StopService 方法停止正在运行的服务。它在尝试停止服务之前验证服务状态。脚本包含状态报告以提供用户反馈。

stop_service.vbs
strServiceName = "Spooler"
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecQuery("Select * from Win32_Service Where Name='" & strServiceName & "'")

For Each objService in colServices
    If objService.State = "Running" Then
        errReturn = objService.StopService()
        If errReturn = 0 Then
            WScript.Echo "Service stopped successfully"
        Else
            WScript.Echo "Failed to stop service. Error: " & errReturn
        End If
    Else
        WScript.Echo "Service is not running"
    End If
Next

脚本在打印后台处理程序服务运行时将其停止。它检查 StopService 的返回代码以确定是否成功。此方法可确保服务干净关闭并提供反馈。与启动类似,正确检查状态可防止错误。

更改服务启动类型

此示例演示如何使用 ChangeStartMode 方法更改服务的启动类型。它展示了如何将服务配置为自动、手动或禁用启动。脚本包含验证。

change_startup.vbs
strServiceName = "Spooler"
strStartMode = "Automatic" ' Can be Automatic, Manual, or Disabled
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecQuery("Select * from Win32_Service Where Name='" & strServiceName & "'")

For Each objService in colServices
    errReturn = objService.ChangeStartMode(strStartMode)
    If errReturn = 0 Then
        WScript.Echo "Start mode changed successfully to " & strStartMode
    Else
        WScript.Echo "Failed to change start mode. Error: " & errReturn
    End If
Next

脚本将打印后台处理程序服务的启动类型更改为“自动”。ChangeStartMode 方法将新的启动类型作为参数。错误处理可确保操作成功的报告。这对于服务配置脚本很有用。

来源

Win32_Service 类文档

在本文中,我们探讨了 VBScript 中的 Win32_Service 类,涵盖了它的用法和实际应用。从查询服务状态到管理服务状态和配置,这些示例展示了强大的服务管理功能。有了这些知识,您就可以创建健壮的系统管理脚本。

作者

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

列出所有 VBScript 教程