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