如何在批处理脚本中使用服务的显示名称删除 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 分隔的字符串。
对于使用,字符串将不区分大小写匹配
参数 /i
与 findstr
。
如图所示 Windows Update
其中有一个 space,转义
space 前面有一个反斜杠。
如果测试正常,修改regexp
的值并删除echo
在 sc
命令前。
你可以使用 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"
替换为您已知的显示名称(每个都用双引号引起来)。
我需要删除一些在 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 分隔的字符串。
对于使用,字符串将不区分大小写匹配
参数 /i
与 findstr
。
如图所示 Windows Update
其中有一个 space,转义
space 前面有一个反斜杠。
如果测试正常,修改regexp
的值并删除echo
在 sc
命令前。
你可以使用 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"
替换为您已知的显示名称(每个都用双引号引起来)。