Batch file 使用数字名称脚本删除随机服务(例如10009752)

Batch file 使用数字名称脚本删除随机服务(例如10009752),batch-file,service,cmd,vbscript,registry,Batch File,Service,Cmd,Vbscript,Registry,我在一家IT咨询公司工作,我们的一位客户感染了一种病毒,它在电脑上创建了一堆随机的exe文件,然后它创建了一些服务,试图自动运行这些文件。我已经从所有机器上删除了病毒,但是还有很多孤立的服务需要删除 总而言之,在他们的工厂里,所有的计算机都提供了4000项独特的服务。这些服务是随机数,我希望找到一种方法用某种脚本删除它们,但我不知道如何为我知道的命令执行通配符 我试过了 reg delete hklm\system\currentcontrolset\services\1* 及 没有任何运气

我在一家IT咨询公司工作,我们的一位客户感染了一种病毒,它在电脑上创建了一堆随机的exe文件,然后它创建了一些服务,试图自动运行这些文件。我已经从所有机器上删除了病毒,但是还有很多孤立的服务需要删除

总而言之,在他们的工厂里,所有的计算机都提供了4000项独特的服务。这些服务是随机数,我希望找到一种方法用某种脚本删除它们,但我不知道如何为我知道的命令执行通配符

我试过了

 reg delete hklm\system\currentcontrolset\services\1*

没有任何运气。任何帮助都将不胜感激,这样我就不必去每台机器(再次)手动删除服务。很抱歉,我总是通过出去看看别人创造了什么来学习新的剧本,但我找不到任何东西可以用来构建这种情况


提前感谢。

我们可以想象一个脚本,它获取所有服务的名称并检查名称是否为数字,如果是,则删除服务:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

for /f "tokens=1 delims= " %%a in ('tasklist') do (
     set "$service=%%a"
     echo !$service:.exe=! | findstr "^[-][1-9][0-9]*$ ^[1-9][0-9]*$ ^0$">nul && call:delete %%a || echo %%a is not numeric
     )
exit/b

:delete
echo %1 is Numeric
echo here the command to delete the service (%1)echo off
将删除服务的命令放入
:delete
标签中

使用@endro检查值是否为数字:

@echo off
setlocal
set "root_key=HKLM\system\currentcontrolset\services"

for /f "tokens=5 delims=\" %%A in ('reg query "%root_key%"') do (
    call :check_key "%%~A"
    if errorlevel 1 call :del_key "%%~A"
)
goto :eof


:check_key
setlocal enabledelayedexpansion
set "filtered="
set "original=%~1"
if not defined original exit /b 0

for /f "delims=0123456789" %%A in ("!original!") do set "filtered=%%~A"
if not defined filtered exit /b 1
exit /b 0


:del_key
echo "%~1"
rem sc stop "%~1"
rem sc delete "%~1"
goto :eof
使用
reg query
循环浏览服务键。第五代币 在
\
之后分隔的是服务的键名

call:用
for
循环定界在数字0到9上检查\u键
。如果 未定义过滤的,则密钥名称中仅存在数字 因此,它将退出标签设置
errorlevel 1

如果
errorlevel 1
在主for循环中被捕获,则
call:del_key
运行
sc-stop
停止服务,并
sc-delete
删除服务 钥匙删除
sc
命令之前的
rem
,以启用它们


为本地计算机使用而创建,但一些小的更改可以用于远程使用。

您可以使用
VbScript
实现这一简单的第一个实例:

或者。。如果您需要使用其他用户

Computer = "." 'IP or Network Name
UserAndDomain = ".\Administrator" 'Account WITH domain "\"
Pass = "" ' Account Password
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objSWbemLocator.ConnectServer(Computer, "Root\CIMv2", UserAndDomain , Pass)
现在获取集合:

Set colServices = objWMIService.ExecQuery("Select * from Win32_Service") ' Where Name ='" & strServiceName & "'" or "Like = 'Someting%'"
'Or 
Set colServices = objSWbemServices.InstancesOf("Win32_Service")
然后删除:

For Each Service in colServices
    If IsNumeric(Service.Name) Then 'Or other condition.
        Service.Delete
    End If
Next

备份数据并对其系统重新成像;否则请人做专业工作。别再搞你不懂的事了。。。
Set colServices = objWMIService.ExecQuery("Select * from Win32_Service") ' Where Name ='" & strServiceName & "'" or "Like = 'Someting%'"
'Or 
Set colServices = objSWbemServices.InstancesOf("Win32_Service")
For Each Service in colServices
    If IsNumeric(Service.Name) Then 'Or other condition.
        Service.Delete
    End If
Next