S C команда сбоя с подстановочным знаком - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь написать сценарий batch для настройки параметров восстановления (первый сбой, второй сбой, последующий сбой), т. Е. SC failure для пользовательского сервера, установленного в качестве службы Windows.

Проблема заключается в том, что имя службы Windows будет отличаться для каждой установки. Имя службы будет иметь формат ProductName_ServerName_Version , где ProductName и Версия будут постоянно меняться, а ServerName будет постоянным. Поэтому я хотел найти установленную службу Windows и настроить параметры восстановления с помощью командного файла, который я могу использовать для всех установок, поскольку часть ServerName постоянна, и я хочу выполнить поиск с использованием этого. Я использую приведенный ниже скрипт.

@echo off
set "service=TestSrv"
for /f "tokens=2 delims=: " %%# in ('sc query type^= service^|find /i "SERVICE_NAME:"^|findstr /i /b /c:"SERVICE_NAME: %service%"') do (
    set "nservice=%%#"
)
echo %nservice%
sc failure "%nservice%" reset= 60000 actions= restart/60000/restart/60000/restart/60000

Здесь TestSrv - это ServerName , и приведенный выше скрипт корректно возвращает имя службы, только если он начинается с TestSrv. Я хочу поиск% ServerName% и как этого добиться.

Заранее спасибо.

1 Ответ

1 голос
/ 17 апреля 2020

Если вы согласны с тем, что в вашей системе не будет других служб, имя которых содержит _TestSrv_, вы можете использовать WMI для получения имени службы.

Например, (пожалуйста, измените TestSrv в строке 1 и завершите последнюю строку, если необходимо) :

@Set "ServerName=TestSrv"&Set "nservice="
@For /F Delims^= %%G In ('%__AppDir__%where.exe /R %__AppDir__% mof.xsl 2^>NUL'
)Do @For /F Tokens^=6Delims^=^" %%H In ('%__AppDir__%wbem\WMIC.exe Service^
 Where "Name Like '%%[_]%ServerName%[_]%%'" Get Name /Format:"%%G" 2^>NUL'
)Do @Set "nservice=%%H"
@If Not Defined nservice Exit /B 1
@Echo %nservice%
@%__APPDIR__%sc.exe failure "%nservice%" etc…
...