|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] netstat + tasklist Вся полезная информация в одном месте! [решено] |
|
CMD/BAT - [решено] netstat + tasklist Вся полезная информация в одном месте! [решено]
|
Новый участник Сообщения: 1 |
Профиль | Отправить PM | Цитировать netstat + tasklist Вся полезная информация в одном месте!
Всем привет, меня зовут Владислав, решил поделиться со всеми своими заметками, на днях написал... Установил на компьютере apache и mysql, и надо был смотреть, в какой порт открыты приложения легко и быстро. Для того есть несколько конcольных команд в Windows Обзор активных портов системы: netstat -ano Обзор запущенных процессов: tasklist И чтобы найти запущен ли, например MySql сервера, приходилось писать tasklist | findstr mysql А чтобы узнать его порт, делал поиск либо по PID, либо по слову LIST и порту 330.* (я знал в каких десятках открыт порт) netstat -ano | findstr 1674 netstat -ano | findstr 33.*LIST Но очень не удобно было запускать каждый раз по две этих команды, чтобы проверить 1. Запущен ли MySql сервер (или apache) 2. И на каком порту он висит В виду этого было принято решение написать batch-файл, который бы предоставлял нам всю необходимую информацию за одну операцию. Спустя долгие часы отладки bat-ника и изучения этой предметной магии, батник был написан Инструкция применения: 1. Создать папку c:\bin 2. сохранить код батника в c:\bin\task.bat 3. добавить путь c:\bin в переменную окружения PATH 4. теперь мы можем писать в консоли что-то вроде task mysql или task apache 5. Вы хотите создать сверху свой батник, где запускаются несколько task, то вызывать их из батника следует командой call task mysql call task apache Код bat-файла task.bat @echo off rem ВНИМАНИЕ! УСТАНОВИТЕ ЭТУ ПЕРЕМЕННУЮ ТАКЖЕ КАК НАЗЫВАЕТСЯ ЭТОТ ФАЙЛ! (если расширение .cmd или .bat, его можно не указывать) set __FILENAME__=task rem Описание rem Данная команда выводит искомую строку из "tasklist" и оторажает связанный с ней порт из "netstat -ano" rem Входные параметры: %1 - часть строки для поиска rem Ограничение: если название программы в tasklist с пробелом, то пакет не сможет вывести netstat rem Примеры: rem rem task mysql rem task http rem rem Если вы пишите свой батник, то из него вызывать надо следующим образом (если вызвать без call, rem то выполнится только первая команда, пока не ясно почему) rem call task mysql rem call task apache rem rem @author Владислав Вольнов rem @date 25.10.2011 rem rem Проверить, не вызван ли файл как спец. bat-ник if "%~1"=="bat_find_task_list" ( call :bat_find_task_list "%~2" goto :eof ) goto begin rem занятые метки циклов rem forbegin1 forbegin2 forbegin3 rem Получить номер порта из строки netstat -ano :get_port_from_netstat rem три вида строк, которы успешно обрабатываются данной функцией rem set str=UDP [few0::91f3:bcea:1ab4:70e0%37]:1900 *:* rem set str= UDP [::]:3702 *:* rem set str= UDP 192.168.56.1:1900 *:* set str=%~1 rem echo %str% rem echo разделение for /f "delims=] tokens=1,2" %%i in ("%str%") do ( if "%%j"=="" ( for /f "delims=: tokens=2" %%a in ("%str%") do ( for /f %%a in ("%%a") do ( rem echo port=%%a set r1=%%a ) ) ) else ( rem echo i=%%i rem echo j=%%j for /f "delims=:" %%a in ("%%j") do ( for /f %%a in ("%%a") do ( rem echo port=%%a set r1=%%a ) ) ) ) goto :eof rem Получить номер PID из указанной строки netstat -ano :get_pid_from_netstat set str=%~1 rem echo getPID %str% for /f "tokens=1,2,3,4,5" %%a in ("%str%") do ( rem %%a %%b %%c %%d %%e if "%%e"=="" ( rem echo getPID.r1=%%d set r1=%%d ) else ( rem echo getPID.r1=%%e set r1=%%e ) ) rem echo getPID.r1=%r1% goto :eof rem Получить PID из строки tasklist :get_pid_from_tasklist rem echo get_pid_from_tasklist %~1 for /f "tokens=2" %%i in ("%~1") do set r1=%%i rem echo get_pid_from_tasklist.res=%r1% goto :eof rem Функция выполняющаяся, если вызвать текущий bat-файл с параметром %1 равным bat_find_task_list :bat_find_task_list tasklist | findstr "%~1" goto :eof rem Вывести список программ, найденные по %1 :prn_find_tasklist set str=%~1 rem echo prn_find_tasklist %str% rem echo NAME=%~0 for /f "usebackq tokens=*" %%i in (`call %__FILENAME__% bat_find_task_list "%~1"`) do call :forbegin3 "%%i" goto :forend3 :forbegin3 rem echo for3body x1=%~1 echo %~1 call :get_pid_from_tasklist "%~1" rem echo for3body r1=%r1% call :prn_netstat_pid %r1% echo. goto :eof :forend3 goto :eof rem Вывести строки с указанным портом из netstat -ano :prn_netstat_port for /f "usebackq tokens=*" %%d in (`netstat -ano`) do call :forbegin1 "%%d" "%~1" goto :forend1 :forbegin1 rem echo str=%~1 port=%~2 call :get_port_from_netstat "%~1" rem echo "%r1%" if "%r1%"=="%~2" ( echo %~1 ) goto :eof :forend1 goto :eof rem Вывести строки с указанным PID из netstat -ano :prn_netstat_pid rem echo prn_netstat_pid %~1 for /f "usebackq tokens=*" %%i in (`netstat -ano`) do call :forbegin2 "%%i" "%~1" goto :forend2 :forbegin2 call :get_pid_from_netstat "%~1" rem echo p=%~2 str=%~1 res=%r1% if "%r1%"=="%~2" echo %~1 goto :eof :forend2 goto :eof rem Основной код :begin echo. call :prn_find_tasklist "%~1" :eof Код файла view.bat Теперь запуска команды view будет выводить на экран информацию вида Удобно, не правда ли |
|
Отправлено: 23:07, 24-10-2011 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] реализация tasklist и taskkill в одном батнике с меню выбора | andman84 | Скриптовые языки администрирования Windows | 2 | 08-04-2010 19:26 | |
Просто полезная информация | Andrewkras | Microsoft Windows NT/2000/2003 | 15 | 20-12-2009 10:03 | |
Разное - Вся информация дублируется | Vospen | Microsoft Windows Vista | 0 | 18-10-2009 15:56 | |
HDD - [решено] Информация о свободном месте | W03L | Накопители (SSD, HDD, USB Flash) | 3 | 21-02-2008 08:11 | |
Просто полезная информация | Andrewkras | Microsoft Windows 2000/XP | 9 | 18-10-2002 21:35 |
|