Проверка типа запуска службы в bat [Решено]
Цитата: Сергей от 28.01.2023, 14:05Всем привет 🖐
Подскажите, как проверить тип запуска службы через bat, и если служба выключена - выполнить одно действие, если автоматический запуск - другое.
Всем привет 🖐
Подскажите, как проверить тип запуска службы через bat, и если служба выключена - выполнить одно действие, если автоматический запуск - другое.
Цитата: Vlado от 28.01.2023, 14:56👋
[spoiler title="Проверка нескольких служб с проверкой на их существование, по sc query"]@echo off&title ServiceCheck rem Изменить список на свой set "ServName=DPS" && call :Check set "ServName=1234" && call :Check set "ServName=ClipSvc" && call :Check set "ServName=TokenBroker" && call :Check pause&exit :Check rem Проверка состояния sc query %ServName% >nul 2>&1||echo Служба %ServName% не существует && set "ServName=" && exit /b sc query %ServName% | find /i "RUNNING" >nul 2>&1 && echo Служба %ServName% запущена||echo Служба %ServName% не запущена set "ServName=" && exit /b[/spoiler]
[spoiler title="Проверка нескольких служб с проверкой на их существование, через реестр"]
Check@echo off&title ServiceCheck rem Изменить список на свой set "ServName=DPS" && call :Check&echo. set "ServName=1234" && call :Check&echo. set "ServName=ClipSvc" && call :Check&echo. set "ServName=TokenBroker" && call :Check&echo. pause>nul&exit :Check rem Проверка состояния reg query "HKLM\System\ControlSet001\Services\%ServName%" >nul 2>&1||echo Служба %ServName%. Не существует [-] && set "ServName=" && exit /b reg query "HKLM\System\ControlSet001\Services\%ServName%" /v "Start" | find /i "0x2" >nul 2>&1 && echo Служба %ServName%. Тип запущена - автоматически - [2] && set "ServName=" && exit /b ) || ( reg query "HKLM\System\ControlSet001\Services\%ServName%" /v "Start" | find /i "0x3" >nul 2>&1 && echo Служба %ServName%. Тип запуска - вручную [3] && set "ServName=" && exit /b echo Служба %ServName%. Тип запуска отключено - [4] && set "ServName=" && exit /b[/spoiler]
[spoiler title="Проверка одной службы с проверкой на ее наличие"]@Echo off&title CheckService rem Проверка состояния службы DPS, изменить имя на свое sc query DPS >nul 2>&1 if errorlevel 1 (echo Службы DPS не существует && .............) else ( sc query DPS | find /i "RUNNING" >nul 2>&1 if errorlevel 1 (echo Служба DPS не запущена && ...........) else (echo Служба DPS запущена && ..........)) pause&exit[/spoiler]
👋
@echo off&title ServiceCheck rem Изменить список на свой set "ServName=DPS" && call :Check set "ServName=1234" && call :Check set "ServName=ClipSvc" && call :Check set "ServName=TokenBroker" && call :Check pause&exit :Check rem Проверка состояния sc query %ServName% >nul 2>&1||echo Служба %ServName% не существует && set "ServName=" && exit /b sc query %ServName% | find /i "RUNNING" >nul 2>&1 && echo Служба %ServName% запущена||echo Служба %ServName% не запущена set "ServName=" && exit /b
Check
@echo off&title ServiceCheck rem Изменить список на свой set "ServName=DPS" && call :Check&echo. set "ServName=1234" && call :Check&echo. set "ServName=ClipSvc" && call :Check&echo. set "ServName=TokenBroker" && call :Check&echo. pause>nul&exit :Check rem Проверка состояния reg query "HKLM\System\ControlSet001\Services\%ServName%" >nul 2>&1||echo Служба %ServName%. Не существует [-] && set "ServName=" && exit /b reg query "HKLM\System\ControlSet001\Services\%ServName%" /v "Start" | find /i "0x2" >nul 2>&1 && echo Служба %ServName%. Тип запущена - автоматически - [2] && set "ServName=" && exit /b ) || ( reg query "HKLM\System\ControlSet001\Services\%ServName%" /v "Start" | find /i "0x3" >nul 2>&1 && echo Служба %ServName%. Тип запуска - вручную [3] && set "ServName=" && exit /b echo Служба %ServName%. Тип запуска отключено - [4] && set "ServName=" && exit /b
@Echo off&title CheckService rem Проверка состояния службы DPS, изменить имя на свое sc query DPS >nul 2>&1 if errorlevel 1 (echo Службы DPS не существует && .............) else ( sc query DPS | find /i "RUNNING" >nul 2>&1 if errorlevel 1 (echo Служба DPS не запущена && ...........) else (echo Служба DPS запущена && ..........)) pause&exit
Цитата: Сергей от 28.01.2023, 15:58Vlado, большое спасибо, это именно то что было нужно (даже больше).
У меня ещё есть проблема, не выполняются команды при таком вводе:
TI.exe cmd.exe /c /min sc config ClipSVC start=auto & net start ClipSVC, если /min убрать, то выполняется только первая команда, подскажите что я делаю не так, если кто-то знает.
Vlado, большое спасибо, это именно то что было нужно (даже больше).
У меня ещё есть проблема, не выполняются команды при таком вводе: СкопированоTI.exe cmd.exe /c /min sc config ClipSVC start=auto & net start ClipSVC, если /min убрать, то выполняется только первая команда, подскажите что я делаю не так, если кто-то знает.
Цитата: Vlado от 28.01.2023, 16:14sc query ClipSvc | find /i "RUNNING" >nul 2>&1 if errorlevel 1 ( echo Служба не запущена, запускаем ...&echo. TI.exe start cmd.exe /c /min sc config ClipSVC start=auto && net start /y ClipSvc ) else ( echo Служба запущена, останавливаем ...&echo. TI.exe start cmd.exe /c /min sc config ClipSVC start=disabled && net stop /y ClipSvc )Если ты хочешь спрятать мигающее окно консоли при выполнении команд от TI, воспользуйся таким способом. Берешь nircmd и это, кладешь в рабочий каталог своего батника, либо в %SystemRoot% (C:\Windows)
@echo off rem Если NirCmd.exe и TrInstaller.exe рядом с батником. cd /d "%~dp0" /////// rem Если NirCmd.exe и TrInstaller.exe находятся в ПАПКЕ 'Work' (изменить на свое имя) рядом с батником cd /d "%~dp0Work" /////// rem Если NirCmd.exe и TrInstaller.exe находятся в %SystemRoot%, то использовать переход cd /d не требуется, поскольку консоль напрямую взаимодействует из %SystemRoot% rem ------------------------------------------ rem Переменная для использования команд от имени TI set "TI=nircmd execmd TrInstaller /c nircmd execmd" rem ------------------------------------------ %TI% sc config ClipSVC start=auto && net start /y ClipSvc %TI% sc config ClipSVC start=disabled && net stop /y ClipSvc %TI% schtasks /Change /TN "Microsoft\Windows\UpdateOrchestrator\Report policies" /Disable и др.
sc query ClipSvc | find /i "RUNNING" >nul 2>&1 if errorlevel 1 ( echo Служба не запущена, запускаем ...&echo. TI.exe start cmd.exe /c /min sc config ClipSVC start=auto && net start /y ClipSvc ) else ( echo Служба запущена, останавливаем ...&echo. TI.exe start cmd.exe /c /min sc config ClipSVC start=disabled && net stop /y ClipSvc )
Если ты хочешь спрятать мигающее окно консоли при выполнении команд от TI, воспользуйся таким способом. Берешь nircmd и это, кладешь в рабочий каталог своего батника, либо в %SystemRoot% (C:\Windows)
@echo off rem Если NirCmd.exe и TrInstaller.exe рядом с батником. cd /d "%~dp0" /////// rem Если NirCmd.exe и TrInstaller.exe находятся в ПАПКЕ 'Work' (изменить на свое имя) рядом с батником cd /d "%~dp0Work" /////// rem Если NirCmd.exe и TrInstaller.exe находятся в %SystemRoot%, то использовать переход cd /d не требуется, поскольку консоль напрямую взаимодействует из %SystemRoot% rem ------------------------------------------ rem Переменная для использования команд от имени TI set "TI=nircmd execmd TrInstaller /c nircmd execmd" rem ------------------------------------------ %TI% sc config ClipSVC start=auto && net start /y ClipSvc %TI% sc config ClipSVC start=disabled && net stop /y ClipSvc %TI% schtasks /Change /TN "Microsoft\Windows\UpdateOrchestrator\Report policies" /Disable и др.
Цитата: Сергей от 28.01.2023, 16:59Vlado, понял, так и думал, но показалось странным что он не нужен если вводить команду отдельно, поэтому решил что это что-то другое.
Ещё раз спасибо, вопрос решён.
Vlado, понял, так и думал, но показалось странным что он не нужен если вводить команду отдельно, поэтому решил что это что-то другое.
Ещё раз спасибо, вопрос решён.
Цитата: Сергей от 28.01.2023, 22:58Как оказалось, эта команда не устанавливает службе режим запуска автоматический, cmd файл просто игнорирует первую команду, но пытается запустить выключенную службу, я вообще не понимаю почему не срабатывает:
TI.exe start cmd.exe /c /min sc config ClipSVC start=auto && net start /y ClipSvc
Как оказалось, эта команда не устанавливает службе режим запуска автоматический, cmd файл просто игнорирует первую команду, но пытается запустить выключенную службу, я вообще не понимаю почему не срабатывает:
TI.exe start cmd.exe /c /min sc config ClipSVC start=auto && net start /y ClipSvc
Цитата: Vlado от 29.01.2023, 00:25Сергей, Да, сейчас попробовал, тут сам TI.exe не хочет работать с /min
TI.exe notepad.exe - работает TI.exe start /min notepad.exe - не работает, хотя в обычной CMD: start /min notepad.exe - работаетВот такой вариант работает, но опять же, если цель спрятать моргающее окно CMD, то с TI.exe я так и не смог найти решения, сколько перебирал различных комбинаций.
TI.exe %comspec% /c sc config ClipSvc start=auto && net start /y ClipSvc
Сергей, Да, сейчас попробовал, тут сам TI.exe не хочет работать с /min
TI.exe notepad.exe - работает TI.exe start /min notepad.exe - не работает, хотя в обычной CMD: start /min notepad.exe - работает
Вот такой вариант работает, но опять же, если цель спрятать моргающее окно CMD, то с TI.exe я так и не смог найти решения, сколько перебирал различных комбинаций.
TI.exe %comspec% /c sc config ClipSvc start=auto && net start /y ClipSvc
Цитата: Сергей от 29.01.2023, 01:11Vlado, что-то всё равно плохо работает, выполняет теперь только первую команду =)
В любом случае спасибо за помощь, буду пробовать TrInstaller.
Vlado, что-то всё равно плохо работает, выполняет теперь только первую команду =)
В любом случае спасибо за помощь, буду пробовать TrInstaller.