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

时间:2019-02-18 22:57:24

标签: batch-file windows-services

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

尝试使用Powershell脚本,但无法使其正常工作。这是在Windows 7计算机上。

sc getkeyname ControlSysService

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

[SC] GetServiceKeyname SUCCESS

Name = zmzhsirmck

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

input Display name
get service name
sc delete service

3 个答案:

答案 0 :(得分:1)

您可能可以使用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"(每个显示名称都用双引号引起来)。

答案 1 :(得分:0)

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

sc delete "service name"

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

答案 2 :(得分:0)

@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,与 正则表达式字符串,它是用空格分隔的字符串。 字符串将不区分大小写 带有/i的自变量findstr。 如Windows Update所示,其中有一个空格,请转义 前面带有反斜杠的空格。

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