Просмотр полной версии : 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
icq
soliter
и тд
И периодически запускать
@echo off
for /f %%a in (kill.txt) do pskill %%a>>log.txt
Нет такого процесса и фиг с ним, есть - pskill его прибьет. Синтаксис pskill.exe для удаленной машины, извини, не помню (не пользуюсь им), вроде там что-то
pskill имя_компа юзер пароль имя_процесса
То, что ты хочешь, тоже можно, только писанины в батнике побольше и гарантии поменьше, что легальный процесс не прибьешь.
Вобщето этот батник задумывался, как мера против игрушек на работе, а так как почти у каждого есть доступ в инет, где немеряное кол-во игр, то создать список нежелательных процессов весьма проблематично (одним солитером дело не обойдется ) ;) С разрешенными все гораздо проще.
Сетки у меня все равно нет сейчас ни дома, ни на работе, проверять негде, я на примере локального компа покажу, подправишь там параметры комстроки сам.
Мысль должна идти :) в таком направлении:
Выдернуть из того, что выдает pslist.exe, имена процессов. Я ее сейчас скачал, она в начале пишет копирайты, номер своей версии и тп, всего 8 ненужных строчек, их пропускаем (skip=8). Из каждой оставшейся строчки необходимо только первое слово(имя процесса), значит делаем tokens=1. Итого получается
@echo off
for /f "skip=8 tokens=1" %%a in ('pslist') do echo %%a>>somename.txt
Оно?
Ну в текстовой файл список процессов писать не надо, имя каждого найденного процесса(%%a) отдаем команде find, пусть find ищет его в списке разрешенных (D:\allow.txt), сделай его предварительно.
System
winlogon
services
lsass
svchost
и тд
А потом в батнике есть такая штука, как две палки || (два символа канала :) ), если после них написать команду, то она выполнится, только если предыдущая команда завершилась с ошибкой(в твоем случае find не нашла процесс в списке разрешенных. То есть получается
@echo off
for /f "skip=8 tokens=1" %%a in ('pslist') do (
find /i "%%a" D:\allow.txt || echo %%a - net ego v allow.txt>>D:\mustkill.txt
)
Вместо записи в mustkill.txt в реале естественно убивать процесс при помощи pskill.exe.
Как запустить получившийся *.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 Разрешение отложенного расширения переменных среды с применением
символа '!' в качестве разделителя. Например, /V:ON разрешает
использовать !var! в качестве расширения переменной var во время
выполнения. Синтаксис var служит для расширения переменных
при вводе, что приводит к совсем другим результатам внутри
цикла FOR.
А если у меня бат файл...я делаю НЕ через командную строку :confused:
$moker
А что по-твоему запускает твой батник? А.С. Пушкин? Попробуй запустить его так:cmd /v:on /c batnik.batЗ.Ы. Не забудь о том, что теперь вместо %var% нужно использовать !var!.
З.З.Ы. Только что проверил вот на таком простеньком примере (файл 1.cmd) - все работает (запускал так: cmd /v:on /c 1.cmd):@echo off
set v=a
echo !v!
for /l %%i in (1,1,5) do set v=!v!b
echo !v!
vBulletin® v3.8.5, Copyright ©2000-2024, Jelsoft Enterprises Ltd.