Войти

Показать полную графическую версию : Анализ процессов в диспетчере задач через BAT


Sargezzz
26-09-2018, 18:05
здравствуйте

У меня сейчас реализован bat файл, который анализирует количество запущенных процессов и если их меньше определенного колва, то стартует необходимый. Но возникла необходимость дополнительного анализа, прежде чем стартовать новый процесс. Анализ необходимо осуществлять по колонке "Command line" (такую можно вывести в дистпетчере задач Винды). Подскажите, как можно анализировать эту колонку? те если колво процессов меньше определенного колва и комманд лайн у запущенных не равна определенной константе, то стартовать новый процесс.

Ниже привожу мой батник на примере calc.exe, а также принт-скрин доп. колонки для анализа:

@echo on
set logfile="C:\BAT\Test\stopstartlog.txt"
setlocal enableextensions enabledelayedexpansion
set sFileName=calc.exe
for /f "usebackq delims=" %%i in (`tasklist.exe /nh /fi "IMAGENAME eq %sFileName%" ^| 2^>nul find.exe /i "%sFileName%" ^| find.exe /c /v ""`) do if %%i lss 2 (start calc.exe)
endlocal
pause


Заранее большое спасибо!

alpap
26-09-2018, 19:02
Sargezzz,
при таком раскладе их надо как-то сортировать
например запущено 10 процессов chrome и 10 notepad, а вроде как 2 всего по большому счету, т.е. закрыть по 1 дочернему - мало что меняется, а по одному одноименному основному - закроется 20, понимаете что имеется ввиду?

YuS_2
26-09-2018, 20:48
возникла необходимость дополнительного анализа, прежде чем стартовать новый процесс. Анализ необходимо осуществлять по колонке "Command line" »
на powershell:
(gwmi win32_process -filt "name='имя_процесса.exe'").commandline
на cmd тоже возможно использовать WMI, но...

Iska
26-09-2018, 22:10
Sargezzz, майнер автоматизируете, что ли?

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
`2^>nul wmic.exe Process where "Name = 'calc.exe' and CommandLine = '"C:\\Windows\\system32\\calc.exe" '" get CommandLine /value ^| find.exe /i /c "CommandLine"`
) do set /a iCount = %%i

if defined iCount if %iCount% lss 2 start "" "C:\Windows\system32\calc.exe"

endlocal
exit /b 0

Sargezzz
27-09-2018, 11:36
Iska, очень здорово) спасибо. Я прям очень многому учусь у Вас!!!) спасибо! А подскажите, пожалуйста, на будущее, можно ли искать еще, к примеру, по подтроке в CommandLine? например, на наличие в строке CommanLine символов "calc.exe" или "else.exe" ???

Iska
27-09-2018, 17:54
по подтроке в CommandLine? например, на наличие в строке CommanLine символов "calc.exe" »
… where "Name = 'calc.exe' and CommandLine like '%%calc.exe%%'" …
Сразу обращаю Ваше внимание, что искать нужно в первую очередь по имени исполняемого файла, и только затем уже по части содержимого командной строки, иначе Вы можете получить не совсем те результаты, что ожидались.




© OSzone.net 2001-2012