Как удалить службу Windows, используя отображаемое имя службы в пакетном скрипте? - PullRequest
0 голосов
/ 19 февраля 2019

Мне нужно удалить несколько сервисов, которые были созданы на ПК, когда они были заражены вредоносным ПО.Имена сервисов являются случайными, но отображаемые имена одинаковы.Я плохо разбираюсь в пакетных файлах, поэтому понятия не имею, как написать скрипт.

Пробовал использовать скрипт powershell, но не смог заставить его работать.Это на компьютере с Windows 7.

sc getkeyname ControlSysService

Когда я ввожу код, указанный выше, я получаю следующий результат.

[SC] GetServiceKeyname SUCCESS

Name = zmzhsirmck

Помимо ControlSysService было бы около 10 других отображаемых имен.У меня есть все отображаемые имена. Мне просто нужен скрипт для удаления службы с использованием отображаемого имени.

input Display name
get service name
sc delete service

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019
@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.

0 голосов
/ 19 февраля 2019

Вы, вероятно, можете сделать это, используя 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" на ваши известные отображаемые имена (каждое заключено в двойные кавычки).

0 голосов
/ 19 февраля 2019

Откройте cmd как администратор и используйте команду:

sc delete "service name"

Чтобы получить имя службы, введите свойства: свойства службы.Просто возьми то, что в названии сервиса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...