IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Batch файл, прибивающий процесс (http://www.imho.ws/showthread.php?t=83613)

$moker 11.04.2005 18:18

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 прибить в случае несовпадения.

загвоздка в физической реализации :)))

Premium 11.04.2005 20:30

А не легче создать список нежелательных процессов, типа в столбик kill.txt
Цитата:

icq
soliter
и тд
И периодически запускать
Код:

@echo off
for /f %%a in (kill.txt) do pskill %%a>>log.txt

Нет такого процесса и фиг с ним, есть - pskill его прибьет. Синтаксис pskill.exe для удаленной машины, извини, не помню (не пользуюсь им), вроде там что-то
pskill имя_компа юзер пароль имя_процесса
То, что ты хочешь, тоже можно, только писанины в батнике побольше и гарантии поменьше, что легальный процесс не прибьешь.

$moker 12.04.2005 09:42

Вобщето этот батник задумывался, как мера против игрушек на работе, а так как почти у каждого есть доступ в инет, где немеряное кол-во игр, то создать список нежелательных процессов весьма проблематично (одним солитером дело не обойдется ) ;) С разрешенными все гораздо проще.

Premium 12.04.2005 20:40

Сетки у меня все равно нет сейчас ни дома, ни на работе, проверять негде, я на примере локального компа покажу, подправишь там параметры комстроки сам.
Мысль должна идти :) в таком направлении:
Выдернуть из того, что выдает 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
приблизительно таким же макаром.

:: Конец мысли
:еоф

$moker 13.04.2005 09:59

Спасибо! Я пошел другим путем,через дополнительную переменную. Ниже это не часть программы, а проверка работоспособности необходимой мне функции, а именно: не пойму где ошибка. В теле цикла по идее переменная 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:

Ghost 13.04.2005 10:00

$moker
cmd.exe должен быть запущен с параметром "/V:ON"
Код:

/V:ON  Разрешение отложенного расширения переменных среды с применением
        символа '!' в качестве разделителя. Например, /V:ON разрешает
        использовать !var! в качестве расширения переменной var во время
        выполнения. Синтаксис var служит для расширения переменных
        при вводе, что приводит к совсем другим результатам внутри
        цикла FOR.


$moker 13.04.2005 10:50

А если у меня бат файл...я делаю НЕ через командную строку :confused:

Ghost 13.04.2005 10:59

$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!



Часовой пояс GMT +4, время: 18:34.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.