[英]How can I delete a windows service by just knowing display name of the service in a batch script?
[英]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
您可能可以使用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"
替換為已知的顯示名稱(每個名稱都用雙引號引起來)。
@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
參數一起使用findstr
。 如帶有空格的Windows Update
所示,請使用前面的反斜杠將其轉義。
如果測試通過,請修改regexp
的值並刪除sc
命令前面的echo
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.