|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] netstat + tasklist Вся полезная информация в одном месте! [решено] |
|
|
CMD/BAT - [решено] netstat + tasklist Вся полезная информация в одном месте! [решено]
|
|
Новый участник Сообщения: 1 |
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 будет выводить на экран информацию вида mysqld.exe 8176 Console 1 42 408 КБ TCP 0.0.0.0:3307 0.0.0.0:0 LISTENING 8176 TCP [::]:3307 [::]:0 LISTENING 8176 httpd.exe 7404 Services 0 4 620 КБ TCP 127.0.0.1:81 0.0.0.0:0 LISTENING 7404 ![]() |
|
|
Отправлено: 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 | |
|