如何在批处理脚本中使用服务的显示名称删除 windows 服务?

How to delete windows service using display name of the service in a batch script?

我需要删除一些在 PC 感染恶意软件时创建的服务。服务名称是随机的,但显示名称都是相同的。我不擅长批处理文件,所以我不知道如何编写脚本。

尝试使用 powershell 脚本,但无法正常工作。这是在 Windows 7 机器上。

sc getkeyname ControlSysService

当我输入上面的代码时,我得到以下结果。

[SC] GetServiceKeyname SUCCESS

Name = zmzhsirmck

除了 ControlSysService 之外,还有大约 10 个其他显示名称。我有所有显示名称我只需要脚本来使用显示名称删除服务。

input Display name
get service name
sc delete service

以管理员身份打开cmd,使用命令:

sc delete "service name"

要获取服务名称,请输入属性: properties of a service. Just take what's in the name of the service

@echo off
setlocal

rem List of space separated display names using regular expressions.
set "regexp=Windows\ Update ReadyBoost"

set "mainkey=HKLM\SYSTEM\CurrentControlSet\services"

for /f "delims=" %%A in ('reg query "%mainkey%"') do (

    for /f "tokens=1,2* delims= " %%B in ('2^>nul reg query "%%~A" /v DisplayName') do (
        if /i "%%~B" == "DisplayName" if not "%%~D" == "" (

            echo %%D | findstr /r /i "%regexp%" 2>nul >nul && (
                echo KeyName:     %%~nxA
                echo DisplayName: %%D
                echo sc delete "%%~D"
            )
        )
    )
)

代码遍历子项的服务项。

它将读取每个子项中的 DisplayName 值以获取日期值。

DisplayName 值与 findstr 相呼应,与 要查找的正则表达式字符串,即 space 分隔的字符串。 对于使用,字符串将不区分大小写匹配 参数 /ifindstr。 如图所示 Windows Update 其中有一个 space,转义 space 前面有一个反斜杠。

如果测试正常,修改regexp的值并删除echosc 命令前。

你可以使用 WMIC:

为了使用您已知的显示名称,您可以运行从命令提示符

For %A In ("FirstName" "Second Name" "Third Display Name") Do @WMIC Service Where "DisplayName='%~A'" Call Delete

作为批处理文件:

@Set List="FirstName" "Second Name" "Third Display Name"
@For %%A In (%List%) Do @WMIC Service Where "DisplayName='%%~A'" Call Delete

显然,在这两种情况下,您都需要将 "FirstName" "Second Name" "Third Display Name" 替换为您已知的显示名称(每个都用双引号引起来)。