Архив рубрики: Tools

Собственный troubleshooting pack

image

Внимание: мой новый RSS-Feed: http://feed.feedcat.net/815939

Измените свою подписку, пожалуйста. 

Как я однажды написал, можно не только сказать пользователю, какой именно ему нужно запустить troubleshooting pack, но и создать собственный. Ну и не прошло пары лет, как я созрел разобраться, как же это делается и рассказать. Я был уверен, что это близко к, как говорят наши иностранные коллеги, “rocket science”, однако я сильно заблуждался: это легко. Мало того, это достаточно интересно, поскольку для его создания нужно применить практически все из арсенала гиков:

1) Использовать GUI

2) Написать скрипты

3) Запустить то, что получилось и увидеть автоматический результат!

Так что, давайте приступим.

К сожалению, эта штука проста, но не настолько, чтобы ее можно было создать в notepad. Ну, может и есть такой метод, но он будет всяко сложнее, чем то, что я сейчас расскажу. Перво-наперво, необходимо скачать Windows 7 SDK. Я, честно говоря, не знаю, какой именно компонент ставит то, что нам нужно, потому поставил все целиком. Если кому-то критично, что ставится, всегда можно выяснить. Ну а после инсталляции, в меню найдется Troubleshooting Pack Designer:

image

Теперь остается определиться, какую проблему нам нужно решить с помощью нашего будущего чудо-инструмента. В моем случае я собираюсь автоматически решать мелкую, но доасдную проблему. Мой ноутбук Dell не всегда корректно определяет скорость сети, после того, как я помещаю его в док-станцию. Обычно помогает выключение и включение сетевого интерфейса, что, в общем-то, не сложно, но всегда же хочется потратить день на то, чтобы потом решить за пять минут задачку, не правда ли? (и да, я знаю, что просто скрипт из двух строчек был бы даже лучше, но… См. вышеWinking smile). Так что запускаем утилиту:

image

и создаем новый проект:

image

image

(обратите внимание на поле “Privacy URL”: оно обязательно к заполнению) Дальше все предельно просто. Добавляем новую корневую причину сбоя (Root cause) (а можно и несколько добавить). В моем случае это “A Network is detected 10Mbps instead of 100”:

image

и жмем “Design Troubleshooter”. Выполняем ряд настроек: Troubleshooter – включать или не включать привилегированный режим, и взаимодейстовать ли с пользователем. В моём случае ни то, ни другое не нужно:

image

Потом конфигурируем resolver, и у меня для него все так же просто:

image

Ну и разумеется, мы желаем, чтобы после исправления проблемы наш инструмент сам проверил, а правда ли проблема устранена:

image

Ну и наконец, нужно создать скрипты для этих задач

Troubleshooter:

# TroubleshooterScript — This script checks for the presence of a root cause

# Key Cmdlets:

# — update-diagrootcause flags the status of a root cause and can be used to pass parameters

# — get-diaginput invokes an interactions and returns the response

# — write-diagprogress displays a progress string to the user

 

$RootCauseID = «NetIs10»

 

# Your detection Logic Here

$speed = (Get-WmiObject -Class Win32_NetworkAdapter | Where-Object { $_.Speed -ne $null -and $_.MACAddress `

-ne $null -and $_.name -like «*82567lm*»}).speed

if ($speed -ne 100000000)

      {

      $RootCauseDetected = $true

      }

      #Replace «$true» with the result of your detection logic

 

#The following line notifies Windows Troubleshooting Platform of the status of this root cause

update-diagrootcause -id $RootCauseId -detected $RootCauseDetected

Чрезвычайно примитивно, всего лишь проверяет, равна ли скорость интерфейса 100Mbps.

Resolver:

# Resolver Script — This script fixes the root cause. It only runs if the Troubleshooter detects the root cause.

# Key cmdlets:

# — get-diaginput invokes an interactions and returns the response

# — write-diagprogress displays a progress string to the user

 

# Your logic to fix the root cause here

$network = Get-WMIObject Win32_NetworkAdapter | where {$_.name -like «*82567lm*»}

$network.disable()

Start-Sleep 4

$network.enable()

Этот даже еще проще: просто “перезагружает” интерфейс.

Ну и теперь компилим (попутно решаем вопрос о том, каким сертификатом подписывать: тестовым самоподписанным или нормальным), пакуем и используем.

image

По крайней мере для меня это было забавным приключением с полезным выхлопом. Надеюсь и всем остальным тоже понравится.

>“Нюхаем” сеть без сниффера… Часть 2

>

MC91021636214Как я рассказывал в предыдущем эпизоде, я говорил, что сбор трафика с помощью netsh это не только ценный мех так же предоставляет нам море информации о системе, на которой мы его запускали. При запуске трассировки создается .cab файл, который содержит другие файлы: 33, чтобы быть точным (по крайней мере у меня получилось 33). Этифайлы предоставляют чертову уйму информации о сетевой конфигурации компьютера, а так же кое-какие логи. Давайте посмотрим на эти файлы:

1) adapterinfo.txt: информация о драйверах Ваших сетевых интерфейсов:

image

Может ли это быть полезным? Да легко. Например, если Вы видите драйвер, который старше Вас, то, может быть, самое время его обновить? Всяко разно, это хоть какая-то информация для начала поиска проблем.

2) dns.txt: в этом файле лежит вывод команды ipconfig /displaydns, в котором содержится кеш DNS-клиента

image

3) envinfo.txt: все, что Вы желали знать о Вашей беспроводной сети и даже больше. Драйверы, поддерживаемые методы аутентификации и протоколы шифрования, интерфейсы и их состояние, настройки WLAN, профли и прочее…

image

4) filesharing.txt: nbtstat –n, nbtstat –c, net config rdr, net config srv, net share

image

5) gpresult.txt: без комментариев

6) neighbors.txt: arp –a, netsh interface ipv6 show neighbors (вызывать netsh из netsh… матрешка, ага… ;) )

7) netiostate.txt: в моем случае тут настройки Teredo

image

8) osinfo.txt: на первый взгляд похоже на вывод команды systeminfo, но на самом деле немного другая информация, что не умаляет ее полезности

image

9) Report.etl: Какой-то трейс. Я туда еще не смотрел, но наверняка что-то полезное ;)

10) wcninfo.txt: информация обо всем беспроводном. Состояние служб, инфомация о файлах, ipconfig и всякое такое. 

image

11) wfpfilters.xml: Тут, похоже, лежит описание правил локального сетевого экрана в XML-формате

12) windowsfirewallconfig.txt: конфигурация того же файрвола. Включен ли он, его глобальные настройки и прочая и прочая

13) еще несколько файлов, которые содержат различные журналы событий, относящиеся к сети, а так же копии ветвей реестра и проччую информацию

image

14) Report.html: тут лежат линки ко всем описанным выше файлам – для удобства

image

Ну вроде бы и все. На самом деле, во время поиска корней той или иной проблемы я частенько был вынужден запрашивать то один, то другой кусочек данных, не имея возможности заранее предугадать в чем проблема и не рискуя требовать все сразу. Теперь я могу дать им всего две команды и получить все скопом, да еще и сетевой трафик записать. Я в восторге =)

>“Нюхаем” сеть без сниффера…

>

MC910216362[1]Частенько при решении разнообразных проблем приходится анализировать сетевой трафик. Обычно это требует установки какой-нибудь программы типа NetMon, WireShark или чего-нибудь еще в том же стиле. И все бы ничего, когда бы это было всегда возможно и эффективно. А что если “на том конце” какой-нибудь “продажный менеджер”, который в упор не желает этим заниматься? Или политика безопасности запрещает ставить дополнительное ПО на сервер? Да и вообще для одного раза ставить какую-то софтину – не очень многим нравится такая идея.
В общем, как все уже догадались, решение есть. Я тут недавно прочитал в одном из блогов среди других не менее замечательных вещей (этот блог входит в топ-5 моих любимых, если вообще не самый интересный для меня, кстати) совершенно чумовую статью, в которой есть решение для такой проблемы.
В кратце, Вам более не нужно ставить, скажем, NetMon на W7/2008 R2, чтобы захватить трафик. Это можно сделать с помощью встроенной утилиты, а именно netsh. Правда, Вам все еще понадобятся
1) права локального администратора на исследуемом компьютере
2) NetMon, чтобы проанализировать полученные данные, после того, как их сбор будет завершен. Но его Вы можете использовать на любом другом компьютере. 
Как это работает? Просто превосходно ;)
1) Начинаем сбор:
netsh trace start capture=yes tracefile=<PathToFile>

image
2) Потом воспроизводим проблему. Я запустил свой chrome (слишком много вкладок открыто в IE ;) ) и сходил на сайт www.microsoft.com.
3) Останавливаем:
netsh trace stop
image
Обратите внимание, что трассировка создала два файла: .etl and .cab. ETL это как раз тот, в котором записаны наши пакетики. Второй… Это то, что даже добавляет “чудесности” этому методу, но мы обсудим его в следующей статье. 
4) Открываем наш файл на любом компьютере с помощью Network Monitor:
image
Ой… Что это с нашими парсерами? Если взглянуть поближе, то мы увидим следующее: 
Process: Windows stub parser: Requires full Common parsers. See the «How Do I Change Parser Set Options(Version 3.3 or before) or Configure Parser Profile (Version 3.4)» help topic for tips on loading these parser sets.
Что ж, очевидно, некоторые парсеры не подключены. Давайте это сделаем, благо, это легко (да, я использую NetMon 3.4). Идем в tools->options
image
Смотрим на вкладку Parser Profiles:
image
И включаем профиль Windows нажав на нем правой кнопкой и кликнув опцию Set As Active:
image
И вот теперь все кристально ясно:
image
5) Ну итеперь делаем все, что нам нужно с помощью NetMon, например, посмотрим на DNS-запрос от имени Chrome:
image
Ну не здорово ли? Точно здорово, потому что мы еще не смотрели на .cab-файл, который содержит тонны полезной информации… Но для этого я отвел следующую статью.

>Секреты %systemroot%System32: defrag

>

Эта команда тоже, кажется, используется чем дальше, тем меньше. Частично, возможно, из-за того, что производительность современных компьютеров позволяет не беспокоиться о незначительной фрагментации, пока еще не слишком поздно она еще незначительная. Частично из-за того, что часть мифов о ней успешно прекратили свое существование. Но в основном потому, что нвчиная с VIsta дефрагментатор запускается автоматически раз в неделю. Ранее (во времена 9х) у нас был расчудесная GUI-программа, теперь у нас есть только утилита командной строки и весьма урезанный (без той самой чудесной визуализации статуса фрагментации: она была абсолютно бесполезная, но просто очень радовала глаз. Я даже думаю иногда, что именно из-за отсутствия этой визуальной магии теперь все меньше и меньше людей пользуется дефрагментацией, а не по описанным выше причинам ;) GUI для управления процессом.

В любом случае, запуск этой программы на регулярной основе означает, что у нас не так уж высок обычно процент фрагментации: 

clip_image001

И все-таки нам не хватает той самой магии =(

Как бы то ни было, если Вам не нравится, что этот “чертов компьютер управляет моими данными”, или Вы просто недостаточно удовлетворены  расписанием, то Вы можете отключить его с помощью программы dfrgui:

clip_image002

Тут же можно изменить время, когда она запускается, или еще сожно создать какое-нибудь сложное расписание в менеджере задач:

clip_image004

Вы даже можете создать скрипт, который управляет фрагментацией, повинуясь какой-то своей, одному ему ведомой логике. Скажем, зачем даже думать о запуске дефрагментатора, если Вы видите картину, навроде вот этой:

clip_image005

Для этого можно создать скрипт, который будет проверять, а есть ли фрагментация и насколько она существенна, дефрагментирует фрагментированное, если нужно, консолидирует свободное место время от времени, пляшет и танцует.

Я же, по правде говоря, вполне комфортно себя чувствую с настройками по-усолчанию, что не мешает мне, впрочем, помнить о существовании других вариантов.

>LCDS: Создавайте свои собственные онлайн курсы

>

imageЧастенько приходится давать внутренние презентации или объяснять по “стопицотому” разу одни и теже вещи просто в процессе передачи знаний о инфраструктуре и процессах на работе.  Не то, чтобы я сильно против, но все это отнимает чертовски много времени и иногда хочется чуть-чуть срезать углы. Предоставлять “студентам” голую презентацию не слишком гуманно и эффективно, каждый раз ее делать – тоже. Одним из решений, показавшихся мне интересными является создание каких-нибудь курсов, которые можно было бы выложить на сайт/портал и отсылать неофитов туда. А тут как раз подвернулась информация об инструменте, как раз для этого предназначенном, да еще и бесплатном. Это MS Learning Content Development System. Довольно-таки мощная и при этом простая система, с богатыми возможностями. Вам достаточно просто скачать ее, установить ее и приступить к созданию курсов. Встроенное аудио/видео, создание тестов или игр для оценки знаний и все такое. А потом просто экспортируете ее в один из доступных форматов и разместите на каком-нибудь сайте. Правда, достаточно интересный инструмент, позволяющий создать требуемый материал весьма быстро, если Вам есть что сказать, конечно же.

Например, я потратил всего 15-20 минут для создания моего собственного демонстрационного курса (разумеется, видео было готово заранее).

>Визуализация состояния сертификатов на веб-сайтах

>

imageВсего лишь еще один забавный инструмент. Если Вы не используете wildcard-сертификаты, то возможно у Вас много сертификатов. Обычно в таких условиях их состояние мониторится какой-нибудь автоматизированной системой (OpsMgr, nagios, собственная разработка), но иной раз нужно просто быстро окинуть взглядом ситуацию, чтобы понять текущее состояние дел. Вы можете использовать для этого опять же встроенные или самодельные отчеты или использовать вот этот инструмент: VerifySSLSertificate. Он маленький, простой, но имеет практически все, что нужно для описанной выше задачи. Вы можете сохранить или загрузить список серверов, сохранить сертификат сервера и установить порог тревоги. То, что надо. Или Вам нужно что-то большее, чтобы просто получить представление о состоянии дел? Я сомневаюсь, если честно:

image 

Так что спасибо Chris Blankenshipза эту утилиту и несколько других.

>Секреты %SystemRoot%System32: BITSAdmin

>

CLIЕще один мой старый устаревший друг. Но хоть и устаревший, а старый друг, лучше новых. В первую очередь он лучше потому, что я все еще не нашел времени хорошо ознакомиться со всякими там PoSh-командлетами вида *-BITSTransfer. Во-вторых… Да нет никаких “во-вторых”, как обычно =) Тем не менее команда совершенно великолепная, и я хотел бы сделать ей посвящение этой стьей. Хотя обычно я ее использовал просто чтобы быть уверенным, что нужный мне файл скачается, даже если сетевое подключение пропадало, с ее помощью можно вытворять массу кунштюков: скачать или наоборот закачать файлы, повторить провалившуюся задачу, скачать только определенную часть файла, выставить кучу параметров типа аутентификации… Крутая, в общем =) 

Но, повторюсь, у меня она в основном скачивала файлы. Давайте посмотрим как можно реализовать эту задачу на примере.

Начнем с создания задачи:

BITSAdmin /CREATE /DOWNLOAD DownloadJob1

image

Легко видеть, что задача была создана, ей назначен некий GUID, который Вы можете использовать позднее (я буду использовать имя). А еще прекрасно видно уведомление о том, что команда устарела. =( Давайте посмотрим внутрь созданной задачи:

BITSadmin /LIST /VERBOSE

image

(ага, МНОГО информации). Очевидно, на данный момент в задаче нет никаких заданий (FILES: 0 / 0), так что давайте кое-что туда добавим:

BITSadmin /ADDFILE DownloadJob1 <URL> <PathToSavedFile>

image

Все добавилось и даже уже создан временный файл:

image

добавим еще один:

image

и увидим второй временный файл:

image

Оба файла пока имеют размер 0 байт. Теперь мы можем получить больше информации о нашей задаче:

image

Тут уже видны оба скачиваемых файла (JOB FILES) и… Мы уже можем подождать, когда файлы скачаются? Увы, нет, поскольку задача еще не запущена (STATE: SUSPENDED). Нам нужно запустить ее и это очень просто:

BITSADMIN /RESUME DownloadJob1

image

Теперь наша задача в состоянии TRANSFERRING, мы можем видеть как много байт (BYTES) или файлов (FILES) уже передано и все такое. И тут – БАМС! Что-то пошло не так и у нас оборвалось соединение: image. Будет ли это мешать нашей скачке? Да:

image

Состояние закачки теперь TRANSIENT_ERROR. Должны ли мы беспокоиться об этом и предпринимать какие-то действия? Нет, поскольку как только соединение восстановится, наша закачка перейдет в состояние QUEUD и потом продолжится автоматически:

image

Смотреть изредка на эту большую картинку постоянно вводя команду /LIST неинтересно, так что мы будем наблюдать за скачиванием по другому: 

BITSadmin /MONITOR /REFRESH 1

image

Эта команда будет отображать состояние наших задач, периодически (в примере каждую секунду) его обновляя:

image

Ну и как только наши файлы скачаются:

image

мы сможем пойти в место, куда из скачивали и… Ой… Что это?

image

Файлы имеют соответствующие размеры, но их имена… Все нормально, файлы еще в виде временных, поскольку задача не завершена, хотя закачка уже и окончена. Нам остался один последний маленький шажок:

BITSadmin /COMPLETE downloadJob1

image

Опять “ой”. Похоже, BITSadmin считает имена заданий чувствительными к регистру. Запомним это и введем команду по-новой:

BITSadmin /COMPLETE DownloadJob1

image

Вуаля! Файлы на своих местах и больше нет никакой работы – все по мне =)

image

З.Ы. Простите мне этот маленький экзерсис по поводу устаревшей программы: просто не смог удержаться Winking smile

З.З.Ы. Если она Вам тоже нравится, читаем тут, тут и тут.