我需要删除在PC上感染恶意软件时在PC上创建的一堆服务。服务名称是随机的,但显示名称都相同。我对批处理文件不好,所以我不知道如何编写脚本。
尝试使用Powershell脚本,但无法使其正常工作。这是在Windows 7计算机上。
sc getkeyname ControlSysService
当我输入上面的代码时,我得到以下结果。
[SC] GetServiceKeyname SUCCESS
Name = zmzhsirmck
除了ControlSysService,还有大约10个其他显示名称。我拥有所有显示名称,我只需要脚本即可使用显示名称删除服务。
input Display name
get service name
sc delete service
答案 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
的值并删除echo
在sc
命令前面。