Как остановить службу без полного имени в командном файле?

Я пытаюсь остановить несколько служб удаленно, не используя полное имя, используя подстановочный знак в командном файле. Что-то вроде этого сервиса *

Вот пара примеров команд, которые я использую для своих нужд, но, как вы можете видеть, я должен явно указать полное имя процесса, и я не могу использовать подстановочные знаки, чтобы найти совпадения для запуска команд для манипулирования этими именами процессов.

taskkill /s server1 /im service2018.EXE
sc.exe \\server1 start service1

taskkill /s server2 /im service2018.exe
sc.exe \\server2 start service2

2 ответа

Что вы можете сделать, это использовать список задач с /FO LIST варианты, а затем передать, что к паре найти команды с /I переключитесь, чтобы искать ключевое слово подстановки по желанию

Вы можете запустить это через цикл FOR /F, используя "DELIMS=: TOKENS=2" наряду с трюком с подстрокой переменной, чтобы разобрать пустые места, чтобы вернуть соответствующие имена процессов, чтобы затем уничтожить и т. д.

Пакетный скрипт

SET SrvName=Server1
SET Wildcard=service

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "DELIMS=: TOKENS=2" %%A IN ('TASKLIST /S %SrvName% /FO LIST ^| FIND /I "Image name:" ^| FIND /I "%Wildcard%"') DO (
    SET var=%%~A
    SET var=!var: =!
    ECHO !var!
    taskkill /s %SrvName% /f /im !var!
)

Дополнительные ресурсы

Я убивал службу, потому что имя службы было непротиворечивым, но для запуска службы полное имя никогда не совпадало на нескольких серверах. Я подумал, что эта команда работает для меня, чтобы запустить службу на удаленном компьютере без полного имени:

WMIC / узел: служба server1, где "name like 'service%%'" вызывает startservice

Другие вопросы по тегам