Когда машина капризничает, велик соблазн сразу хвататься за лечение: что-то отключать, переустанавливать, крутить настройки. Это путь наугад, при котором лечат симптом, не понимая болезни, и часто делают хуже. Опытный диагност начинает иначе, со сбора полной картины состояния системы. Прежде чем что-то менять, он делает снимок: какое железо, какая система, какие драйверы, что в журналах, как настроено окружение. Этот снимок и есть фундамент осмысленной диагностики, ведь по нему видно и то, что бросается в глаза, и то, что всплывёт лишь при сопоставлении деталей. Без него диагностика слепа, с ним обретает зрение.
Ценность полного снимка ещё и в том, что он даёт точку отсчёта и предмет для передачи. Точку отсчёта, потому что зафиксированное состояние можно сравнить с тем, что было раньше или станет потом, выявив изменения. Предмет для передачи, потому что снимок отдают тому, кто разбирается глубже, и он видит картину, не сидя за машиной. Многие задачи поддержки именно так и решаются: пользователь снимает отчёт о системе и отправляет специалисту, который по нему ставит диагноз удалённо. Понять, как собирать такие снимки штатными средствами, значит овладеть первым и важнейшим шагом любой серьёзной диагностики, без которого всё дальнейшее лечение это стрельба вслепую.
Сводка о системе одной командой
Самый быстрый способ получить обзорный снимок системы это командлет, собирающий обширную сводку о машине. Сбор полной информации о компьютере выглядит так:
Get-ComputerInfo
Эта команда выдаёт обширнейшую сводку: версию и сборку системы, сведения о железе, памяти, процессоре, настройках, состоянии безопасности. Это самый полный из быстрых снимков, охватывающий разом множество аспектов. Когда нужна не вся сводка, а конкретные сведения, их отбирают, указав интересующие поля. Отбор ключевых сведений о системе сужает вывод до нужного:
Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion, OsHardwareAbstractionLayer, CsManufacturer, CsModel, CsTotalPhysicalMemory
Здесь из обширной сводки взяты лишь название и версия системы, производитель и модель машины, объём памяти. Такой прицельный отбор удобен, когда нужны определённые факты, а не вся гора сведений. Классический путь обзорной сводки лежит и через старую команду, привычную многим:
systeminfo
Эта команда выводит сводку о системе в текстовом виде, и хороша тем, что есть всюду и не требует современной оболочки. Она показывает версию системы, время её работы, память, сетевые адаптеры, установленные исправления. Для быстрого обзора с любой машины эта старая команда незаменима, а её текстовый вывод легко сохранить в файл для передачи.
Графическое средство сведений о системе
Для наглядного и подробного снимка есть графическое средство сведений о системе, разворачивающее полную карту машины в удобном древовидном виде. Открывается оно командой:
msinfo32
Это средство показывает исчерпывающую картину: сводку о системе, аппаратные ресурсы, компоненты, программную среду. По дереву слева ходят, раскрывая нужные разделы, от процессора и памяти до сетевых адаптеров и драйверов. Главная ценность этого средства в полноте и в возможности сохранить весь снимок в файл для передачи специалисту. Сохранённый файл сведений о системе несёт полную картину машины, по которой разбирающийся человек ставит диагноз, не сидя за ней.
Особенно полезен раздел программной среды, где видны загруженные драйверы, запущенные службы, программы автозапуска, текущие задачи. Это окно во внутреннюю жизнь системы, по которому выявляют конфликтные драйверы, лишние службы, подозрительные программы. Для диагностики проблем, растущих из софта, а не из железа, этот раздел незаменим, ведь он показывает не статичные характеристики, а живое состояние работающей системы. Умение читать его и отличает поверхностный взгляд на снимок от глубокого, добирающегося до сути.
Снимок графической подсистемы и устройств
Для проблем с графикой, звуком, играми, видео есть отдельное специализированное средство, снимающее подробную картину мультимедийной подсистемы. Открывается оно командой:
dxdiag
Это средство собирает сведения о системе, графическом адаптере, звуке, устройствах ввода, версиях мультимедийных компонентов. Оно особенно ценно при разборе проблем с играми и видео, ведь показывает именно ту часть системы, что за них отвечает. Как и графическое средство сведений, оно умеет сохранять весь снимок в файл для передачи, что часто и требуется службам поддержки игр и мультимедийных программ для удалённой диагностики.
Снимок графической подсистемы дополняет общий снимок системы там, где общий недостаточно детален. Общая сводка скажет, какой видеоадаптер стоит, но специализированное средство покажет версию его драйвера, режимы работы, состояние ускорения, поддерживаемые возможности. Для проблем, упирающихся в графику, эта детальность решает, ведь причина нередко в конкретной версии драйвера или отключённой возможности, что в общей сводке не видно. Понимание, какое средство под какой класс проблем, и есть зрелость диагноста: общий снимок для широкого обзора, специализированный для углубления в конкретную подсистему.
Сбор журналов и недавних ошибок
Снимок состояния не полон без журналов, ведь в них летопись того, что происходило с машиной, а статичные характеристики этого не показывают. Сбор недавних ошибок из журнала системы через PowerShell даёт картину свежих неполадок:
Get-WinEvent -FilterHashtable @{LogName='System'; Level=1,2; StartTime=(Get-Date).AddDays(-3)} | Format-Table TimeCreated, Id, Message -AutoSize
Здесь из системного журнала берутся ошибки и критические события за последние три дня, рисуя картину недавних проблем. Это бесценно, ведь нередко причина капризов машины прямо записана в журнале, надо лишь заглянуть. Похожим образом собирают свежие ошибки и из журнала приложений, где отражаются проблемы программ. Сочетание характеристик системы и журнальных ошибок и даёт объёмный снимок: что за машина и что с ней недавно случалось.
Особенно ценны при диагностике события о сбоях и неожиданных перезагрузках. Выборка событий о некорректном завершении работы помогает понять, не падает ли система. Когда машина внезапно перезагружается или зависает, журнал хранит следы этих событий, и их выборка указывает на природу беды: перегрев, сбой драйвера, отказ оборудования, проблема питания. Чтение этих следов превращает загадочные внезапные перезагрузки из необъяснимых в диагностируемые, ведь система оставляет в журнале улики, по которым восстанавливают, что произошло.
Сборка комплексного отчёта в один файл
Подлинная сила приходит, когда разрозненные снимки собирают в единый комплексный отчёт, удобный для анализа и передачи. Вместо отдельных команд скрипт собирает всё нужное в один файл: характеристики, журналы, состояние служб и драйверов. Каркас сбора комплексного отчёта в файл собирается так:
$otchet = "C:\Diag\otchet-$(Get-Date -Format 'yyyy-MM-dd').txt"
"=== СИСТЕМА ===" | Out-File $otchet
Get-ComputerInfo | Out-File $otchet -Append
"=== ОШИБКИ ЗА 3 ДНЯ ===" | Out-File $otchet -Append
Get-WinEvent -FilterHashtable @{LogName='System'; Level=1,2; StartTime=(Get-Date).AddDays(-3)} | Out-File $otchet -Append
Здесь скрипт собирает в один датированный файл и характеристики системы, и недавние ошибки, разделяя их заголовками для читаемости. Такой комплексный отчёт несёт полную картину в одном файле, который удобно и хранить, и передать специалисту. Это куда практичнее россыпи отдельных снимков, ведь всё нужное собрано воедино и не растеряется, а структура с заголовками делает отчёт читаемым.
Скрипт сбора отчёта стоит сделать всеохватным, включив в него и состояние дисков, и список служб, и сетевые настройки, и установленные программы, всё, что может понадобиться для диагностики. Один прогон такого скрипта снимает исчерпывающую картину машины, которую дальше анализируют не торопясь или передают тому, кто разберётся. Для поддержки парка машин такой скрипт незаменим: вместо хождения по каждой машине его прогоняют удалённо, собирая отчёты со всех, и анализируют картину парка из одного места. Это и есть переход от разовой диагностики одной машины к систематическому надзору за состоянием множества.
Снимок состояния дисков, служб и драйверов
Полный отчёт о машине неполон без сведений о ключевых подсистемах, чьё состояние напрямую влияет на здоровье системы. Диски это первое, что проверяют, ведь от их состояния зависит и сохранность данных, и скорость работы. Сбор сведений о дисках и их состоянии через PowerShell даёт картину накопителей:
Get-PhysicalDisk | Select-Object FriendlyName, MediaType, Size, HealthStatus
Здесь видны накопители машины с их типом, объёмом и, что важнее всего, состоянием здоровья. Показатель здоровья диска это ранний сигнал беды, ведь диск, помеченный как нездоровый, предупреждает об отказе заранее, давая время спасти данные. Включение этого показателя в отчёт превращает его из статичного описания в раннее предупреждение о надвигающихся проблемах с накопителями.
Состояние служб тоже входит в полный снимок, ведь остановленная или сбоящая служба нередко и есть причина проблемы. Сбор служб, которые должны работать, но остановлены, выявляет такие случаи:
Get-Service | Where-Object {$_.StartType -eq 'Automatic' -and $_.Status -ne 'Running'} | Select-Object Name, DisplayName, Status
Эта выборка показывает службы, настроенные на автозапуск, но почему-то не работающие, а это частый источник неполадок. Похожим образом в отчёт включают и сведения о драйверах, особенно проблемных, ведь конфликтный или сбойный драйвер причина множества бед. Сочетание состояния дисков, служб и драйверов и даёт ту глубину снимка, на которой видны не только характеристики, но и реальные проблемные точки работающей системы.
Сравнение снимков во времени для выявления изменений
Особая ценность снимков раскрывается, когда их делают регулярно и сравнивают, ведь многие проблемы проявляются именно как изменение состояния. Машина работала, потом что-то поменялось, и начались капризы. Сравнив свежий снимок с прежним, выявляют, что именно изменилось, и это нередко прямо указывает на причину. Сохранение снимка в структурированном виде для последующего сравнения собирается так:
Get-ComputerInfo | Export-Clixml "C:\Diag\snimok-$(Get-Date -Format 'yyyy-MM-dd').xml"
Здесь снимок системы сохраняется в структурированном файле, который потом загружают и сравнивают со свежим. Сопоставив два снимка, видят появившиеся и исчезнувшие службы, изменившиеся настройки, обновлённые драйверы, всё, что поменялось между ними. Это мощнейший приём диагностики, ведь он отвечает на ключевой вопрос что изменилось, с которого и стоит начинать разбор любой проблемы, появившейся не на пустом месте.
Регулярное снятие снимков превращает диагностику из реактивной в проактивную. Имея историю снимков, не гадают, что поменялось перед поломкой, а точно видят это по сравнению. Вдобавок история снимков ловит постепенную деградацию, незаметную в моменте, но очевидную при сравнении состояний с интервалом. Для важных машин такая практика регулярных снимков и их сравнения и есть высшая форма надзора за состоянием, при которой проблему замечают по изменению картины задолго до того, как она проявится явными симптомами, а причину находят сравнением, а не мучительным гаданием.
Удалённый сбор отчётов с парка машин
Сбор отчёта с одной машины полезен, но настоящая сила раскрывается при удалённом сборе с целого парка из одного места. Механизм удалённого выполнения команд позволяет отправить сбор отчёта на множество машин и получить результаты централизованно. Сбор сводки с удалённой машины через этот механизм выглядит так:
Invoke-Command -ComputerName srv01, srv02, srv03 -ScriptBlock { Get-ComputerInfo | Select-Object CsName, WindowsVersion, CsTotalPhysicalMemory }
Здесь команда уходит сразу на несколько машин, на каждой собирает сводку и приносит результаты обратно, помечая, с какой машины какие данные. Так администратор снимает картину состояния всего парка, не обходя машины по одной. Это незаменимо в крупной сети, где ручной обход десятков машин ради сбора сведений съел бы дни, а удалённый сбор делает то же за минуты.
Удалённый сбор особенно ценен для выявления общих проблем парка, проявляющихся на многих машинах разом. Собрав сведения со всех, легко увидеть, скажем, что на части машин не хватает обновления, или устарел драйвер, или кончается место на диске. Эта картина парка в целом подсказывает системные проблемы, которые на одной машине выглядели бы частным случаем, а в масштабе парка обнаруживают общую причину. Переход от диагностики отдельной машины к надзору за парком через удалённый сбор отчётов и отличает администратора крупной инфраструктуры, мыслящего масштабом, от того, кто чинит машины по одной, не видя общей картины.
Сбор полного снимка состояния системы это первый и важнейший шаг любой серьёзной диагностики, превращающий слепое лечение наугад в осмысленное движение к причине. Быстрая сводка через командлет или старую команду, наглядная картина через графические средства сведений о системе и графической подсистеме, журналы недавних ошибок, всё это складывается в объёмный снимок машины. Собранный в комплексный отчёт одним скриптом, этот снимок даёт и точку отсчёта для сравнения, и предмет для передачи специалисту, и основу для удалённой диагностики целого парка. Освоив сбор таких снимков штатными средствами, диагност обретает зрение там, где без них действовал бы на ощупь, и начинает любую серьёзную задачу не с лихорадочного лечения симптомов, а со спокойного изучения полной картины, в которой причина проблемы обычно и обнаруживается.