![]() |
Batch файл, прибивающий процесс
Необходимо по имени процесса прибивать приложение. Есть список "хороших" процессов, с которыми сравниваются каждый из запущенных процессов на удаленной машине и в случае ее отсутствия прибить процесс.
Вот как я думаю. с помощью pslist я могу создать текстовый файл типа Name Pid Pri Thd Hnd Priv CPU Time Elapsed Time Idle 0 0 2 0 0 10:10:18.812 5:11:32.823 System 8 8 47 147 24 0:00:20.984 5:11:32.823 ну и тд. отсюда нужно попробовать достать имя процесса, сравнить с правильным (другой файл содежит имена всех "правильных" процессов) и с помощью pskill прибить в случае несовпадения. загвоздка в физической реализации :))) |
А не легче создать список нежелательных процессов, типа в столбик kill.txt
Цитата:
Код:
@echo off pskill имя_компа юзер пароль имя_процесса То, что ты хочешь, тоже можно, только писанины в батнике побольше и гарантии поменьше, что легальный процесс не прибьешь. |
Вобщето этот батник задумывался, как мера против игрушек на работе, а так как почти у каждого есть доступ в инет, где немеряное кол-во игр, то создать список нежелательных процессов весьма проблематично (одним солитером дело не обойдется ) ;) С разрешенными все гораздо проще.
|
Сетки у меня все равно нет сейчас ни дома, ни на работе, проверять негде, я на примере локального компа покажу, подправишь там параметры комстроки сам.
Мысль должна идти :) в таком направлении: Выдернуть из того, что выдает pslist.exe, имена процессов. Я ее сейчас скачал, она в начале пишет копирайты, номер своей версии и тп, всего 8 ненужных строчек, их пропускаем (skip=8). Из каждой оставшейся строчки необходимо только первое слово(имя процесса), значит делаем tokens=1. Итого получается Код:
@echo off Ну в текстовой файл список процессов писать не надо, имя каждого найденного процесса(%%a) отдаем команде find, пусть find ищет его в списке разрешенных (D:\allow.txt), сделай его предварительно. Цитата:
Код:
@echo off Как запустить получившийся *.cmd на всех машинах в сетке знаешь? Копирование по сети на все машины сразу http://www.kv.by/index2004171106.htm приблизительно таким же макаром. :: Конец мысли :еоф |
Спасибо! Я пошел другим путем,через дополнительную переменную. Ниже это не часть программы, а проверка работоспособности необходимой мне функции, а именно: не пойму где ошибка. В теле цикла по идее переменная Z должна менять значение. в текстовом файле, содержащем все переменные она поменяла, а каталог все равно создется lsas
@echo off set v=CMD set z=lsas for /f %%j in (right.txt) do ( if %%j == %v% ( set z=%%j set >c:\1212\11.txt md c:\1212\%z% ) ) В чем ошибка? Ниже приведу сам текст программы, который тоже благополучно не работает :( @echo off set v=b for /f "tokens=1,2* delims= " %%i in (15.txt) do ( if not %v% == a (pskill %z%>log.txt) else ( for /f %%j in (right.txt) do ( if %%j == %%i (set v=a) else ( set z=%%i ) ) ) ) :idontnow: |
$moker
cmd.exe должен быть запущен с параметром "/V:ON" Код:
/V:ON Разрешение отложенного расширения переменных среды с применением |
А если у меня бат файл...я делаю НЕ через командную строку :confused:
|
$moker
А что по-твоему запускает твой батник? А.С. Пушкин? Попробуй запустить его так: Код:
cmd /v:on /c batnik.bat З.З.Ы. Только что проверил вот на таком простеньком примере (файл 1.cmd) - все работает (запускал так: cmd /v:on /c 1.cmd): Код:
@echo off |
Часовой пояс GMT +4, время: 18:34. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.