簡體   English   中英

如何在批處理腳本中使用服務的顯示名稱刪除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

您可能可以使用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"替換為已知的顯示名稱(每個名稱都用雙引號引起來)。

以管理員身份打開cmd並使用以下命令:

sc delete "service 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM