Любой сисадмин рано или поздно сталкивается с ситуацией, когда юзер, который обращается с жалобами на проблемы, весьма далек от технических нюансов (классическая ситуация – какая-то блондинка, максимально подробное описание проблемы у которой сводится к «инет не работает»). Вот для таких случаев может пригодится нижеприведенный сценарий, результат работы которого юзер каким-то образом должен передать админу.

set cur_time=%time:~0,8%

set cur_date=%date%

set f=result.txt

set TMP=defgate.rsl

set STEPS=8

echo Please wait a few minutes. Diagnostics in progess…

echo %cur_time% %cur_date% >> %f%

ipconfig /all >> %f%

echo Step 1 of %STEPS% completed.

tracert -d 195.214.195.105 >> %f%

echo Step 2 of %STEPS% completed.

tracert -d -h 7 avz.org.ua >> %f%

echo Step 3 of %STEPS% completed.

tracert -d -h 7 mail.ru >> %f%

echo Step 4 of %STEPS% completed.

route print >> %f%

echo Step 5 of %STEPS% completed.

netstat -b >> %f%

echo Step 6 of %STEPS% completed.

netsh diag show ieproxy >> %f%

echo Step 7 of %STEPS% completed.

netsh diag show gateway > %TMP%

FOR /F “skip=3 tokens=3”; %%I IN (%TMP%) DO (

ping -n 50 %%I >> %f%

route print %%I >> %f%

goto END

)

:END

erase %TMP%

echo Diagnostics complete. Please, send the file %f% to support team.

Особенно заслуживает внимания конструкция

FOR /F “skip=3 tokens=3”; %%I IN (%TMP%)

которая представляет собой некоторый аналог связки команд tail и awk (или cut) в Unix-системах. Ключ skip=3 означает, что в файле %TMP% будет пропущено первые 3 строки, а tokens=3, означает, что в параметр цикла %%I будет подставлена 3-яя по счету подстрока в 4-ой строке файла (подстроки по умолчанию разделяются пробелами). Так что даже не имея под рукой любимого bash-а, в Windows можно как-то выкрутиться, всего-то почитав хелп «for /?» 🙂

 

Комментарии

comments powered by Disqus