Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пакетные файлы.doc
Скачиваний:
23
Добавлен:
02.12.2018
Размер:
129.02 Кб
Скачать

Поиск компьютеров с запущенным приложением

Для реализации этого скрипта используются утилиты из пакета PSTools (краткое описание). Создадим командный файл, выполняющий поиск в локальной сети компьютеров с выполняющейся программой, имя которой (начальная часть имени) задается в качестве параметра при запуске, например, game . При обнаружении будет послано сообщение на компьютер ADMINCOMP и обнаруженое приложение будет принудительно завершено. Для поиска будем использовать утилиту Pslist.exe и анализировать ее код возврата. Значение переменной ERRORLEVEL равное нулю означает, что утилита обнаружила на удаленном компьютере процесс, удовлетворяющий условиям поиска. Имя процесса для поиска будем задавать в качестве параметра при запуске командного файла. Присвоим нашему командному файлу имя psl.bat. Запуск с параметром будет выглядеть следующим образом: psl.bat game Для начала, нужно проверить, задан ли параметр в командной строке при запуске, и, если не задан, выдадим сообщение пользователю и завершим выполнение. Если же параметр задан - перейдем на метку " PARMOK ": @echo off if "%1" NEQ "" GOTO PARMOK ECHO Нужно задать имя процесса для поиска exit :PARMOK

Теперь нужно обеспечить последовательное формирование IP-адресов компьютеров для командной строки PSlist. Проще всего это сделать с помощью присвоения временной переменной окружения (действительной только на время выполнения командного файла) значения постоянной составляющей адреса (например - 192.168.0.) и вычисляемого значения младшей части (например, в диапазоне 1-254). Для примера будем считать, что нам необходимо просканировать компьютеры в диапазоне адресов: 192.168.0.1 - 192.168.0.30: set IPTMP=192.168.0. - старшая часть адреса set /A IPLAST=1 - младшая часть. Ключ /A означает вычисляемое числовое выражение set IPFULL=%IPTMP%%IPLAST% - значение полного IP-адреса. Командная строка для PSlist будет выглядеть cледующим образом: pslist \\%IPFULL% %1 Теперь осталось только циклически запускать PSlist, прибавляя в каждом цикле единицу к младшей части адреса, пока ее значение не достигнет 30 и анализировать значение ERRORLEVEL после выполнения. Для анализа результата будем выполнять переход командой: GOTO REZULT%ERRORLEVEL% обеспечивающей переход на метку REZULT0 при обнаружении процесса и на REZULT1 - при его отсутствии. Окончательное содержимое командного файла:

@echo off if "%1" NEQ "" GOTO PARMOK ECHO Нужно задать имя процесса для поиска exit :PARMOK set IPTMP=192.168.0. rem Зададим начальное значение " хвоста " IP- адреса set /A IPLAST=1 rem M0 - метка для организации цикла :M0 rem Переменная IPFULL - полное значение текущего IP-адреса set IPFULL=%IPTMP%%IPLAST% rem Если " хвост "больше 30 - на выход IF %IPLAST% GTR 30 GOTO ENDJOB pslist \\%IPFULL% %1 GOTO REZULT%ERRORLEVEL% :REZULT0 rem Если найдено приложение- отправим сообщение на ADMINCOMP net send ADMINCOMP Запущено %1 - %IPFULL% rem И завершим приложение с помощью PSkill pskill \\%IPFULL% %1 :REZULT1 rem Сформируем следующий IP-адрес set /A IPLAST=%IPLAST% + 1 rem Перейдем на выполнение следующего шага GOTO M0 rem Завершение работы :endjob exit

В заключение добавлю, что для того, чтобы этот скрипт работал, PSlist.exe и PSkill.exe должны быть доступны в путях поиска исполняемых файлов, например в каталоге WINDOWS. Пользователь, запускающий его, должен обладать правами администратора по отношению к сканируемым компьютерам. И, если текущий пользователь таковым не является, то в параметры запуска утилит PSlist.exe и PSkill.exe нужно добавить ключи, задающие имя пользователя и пароль.