Автоматический сбор информации о ПК с помощью WMI и Excel

Зачем это нужно
Иногда нужно быстро узнать характеристики CPU, объём памяти, серийный номер, версии установленных программ или список сервисов. Обычный путь через Панель управления или Диспетчер устройств занимает время. С помощью WMI и VBA вы получаете готовый инструмент-инвентаризацию, который обновляется при открытии книги Excel.
Важно: этот подход работает только в настольной версии Excel (Excel для Windows) с включёнными макросами.
Что такое WMI в одно предложение
Windows Management Instrumentation (WMI) — это набор интерфейсов Windows для получения информации и управления компонентами ОС и оборудования.
Возможные сценарии использования
- Быстрая инвентаризация рабочего места для IT-поддержки.
- Сбор данных перед обновлением или миграцией.
- Автоматические отчёты о конфигурации для аудита.
В чем ограничения
- Требуется настольный Excel с поддержкой VBA (.xlsm).
- Макросы могут быть заблокированы политиками безопасности или настройками Office.
- Для доступа к некоторым данным могут потребоваться права администратора.
- Если служба WMI выключена или повреждена, запросы вернут ошибку.
Магия WMI
На любом компьютере с Windows доступен мощный набор расширений — Windows Management Instrumentation. WMI предоставляет обширный способ получить сведения и спецификации об операционной системе, аппаратуре и установленном ПО.

WMI доступен из языков программирования, включая VBA, который присутствует почти во всех продуктах Microsoft Office.
Подготовка книги Excel
- Создайте новую книгу Excel и сохраните её как файл с поддержкой макросов, например MyComputerInfo.xlsm.
- Пропустите Sheet1 и переименуйте следующие 11 листов: Network, LogicalDisk, Processor, Physical Memory, Video Controller, OnBoardDevices, Operating System, Printer, Software, Accounts, Services.
Эти листы будут содержать подробные данные и обновляться при каждом открытии книги.

- Перейдите на вкладку Разработчик. В разделе Управление элементами управления нажмите Просмотр кода.

Если вкладки Разработчик нет: Файл > Параметры > Настроить ленту. В списке выберите Все вкладки, затем добавьте Разработчик в правую панель.

В редакторе VBA добавьте новый модуль: Insert > Module. В модуле будут размещены все процедуры, использующие WMI для извлечения данных и записи их в листы.

Общие переменные модуля
Поместите эти строки в начало окна кода (верх модуля) — они объявляют объекты, которые будут использоваться в запросах WMI.
Public oWMISrvEx As Object 'SWbemServicesEx
Public oWMIObjSet As Object 'SWbemServicesObjectSet
Public oWMIObjEx As Object 'SWbemObjectEx
Public oWMIProp As Object 'SWbemProperty
Public sWQL As String 'WQL Statement
Public n
(Вставьте именно эти строки как есть перед процедурами.)

Пример процедуры для сетевой информации
Ниже пример процедуры NetworkWMI. Она делает WMI-запрос Win32_NetworkAdapterConfiguration и записывает пары имя/значение в лист “Network”.
Sub NetworkWMI()
sWQL = "Select * From Win32_NetworkAdapterConfiguration"
Set oWMISrvEx = GetObject("winmgmts:root/CIMV2")
Set oWMIObjSet = oWMISrvEx.ExecQuery(sWQL)
intRow = 2
strRow = Str(intRow)
ThisWorkbook.Sheets("Network").Range("A1").Value = "Name"
ThisWorkbook.Sheets("Network").Cells(1, 1).Font.Bold = True
ThisWorkbook.Sheets("Network").Range("B1").Value = "Value"
ThisWorkbook.Sheets("Network").Cells(1, 2).Font.Bold = True
For Each oWMIObjEx In oWMIObjSet
For Each oWMIProp In oWMIObjEx.Properties_
If Not IsNull(oWMIProp.Value) Then
If IsArray(oWMIProp.Value) Then
For n = LBound(oWMIProp.Value) To UBound(oWMIProp.Value)
Debug.Print oWMIProp.Name & "(" & n & ")", oWMIProp.Value(n)
ThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.Value(n)
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft
intRow = intRow + 1
strRow = Str(intRow)
Next
Else
ThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.Value
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft
intRow = intRow + 1
strRow = Str(intRow)
End If
End If
Next
Next
End Sub
Клонирование процедуры для других листов
Вы будете создавать идентичные процедуры для каждого листа, изменив только WMI-класс и имя листа.
Пример: сделать копию NetworkWMI и заменить:
sWQL = "Select * From Win32_NetworkAdapterConfiguration"на
sWQL = "Select * From Win32_LogicalDisk"и заменить все обращения к листу “Network” на “LogicalDisk”.
Вам нужно создать процедуры:
- ProcessorWMI для листа Processor
- PhysicalMemWMI для листа Physical Memory
- VideoControlWMI для листа Video Controller
- OnBoardWMI для листа OnBoardDevices
- PrinterWMI для листа Printer
- OperatingWMI для листа Operating System
- SoftwareWMI для листа Software
- ServicesWMI для листа Services
Классы Win32, которые используются чаще всего
- Win32_NetworkAdapterConfiguration — сетевые параметры
- Win32_LogicalDisk — диски, объёмы и свободное место
- Win32_Processor — характеристики CPU
- Win32_PhysicalMemoryArray — сведения о RAM
- Win32_VideoController — видеокарта
- Win32_OnBoardDevice — устройства материнской платы
- Win32_OperatingSystem — версия Windows и серийный номер
- Win32_Printer — установленные принтеры
- Win32_Product — установленные программы
- Win32_BaseService — сервисы Windows
Автоматический запуск при открытии книги
В объекте ThisWorkbook откройте обработчик события Open. Вставьте вызовы всех процедур, чтобы они запускались при открытии файла.
Private Sub Workbook_Open()
NetworkWMI
LogicalDiskWMI
ProcessorWMI
PhysicalMemWMI
VideoControlWMI
OnBoardWMI
PrinterWMI
SoftwareWMI
OperatingWMI
ServicesWMI
End Sub
Теперь при открытии книги все листы будут автоматически заполняться.
Учтите: при первом запуске будет собран очень большой объём данных — дождитесь окончания процесса.
Практические советы по форматированию и очистке листов
Перед записью новых данных полезно очищать лист и форматировать заголовки. Ниже пример вспомогательной процедуры, которую можно добавить в Module1.
Sub PrepareSheet(sheetName As String)
With ThisWorkbook.Sheets(sheetName)
.Cells.Clear
.Range("A1").Value = "Name"
.Range("A1").Font.Bold = True
.Range("B1").Value = "Value"
.Range("B1").Font.Bold = True
.Columns("A:B").AutoFit
End With
End Sub
Вызовите PrepareSheet(“Network”) в начале NetworkWMI и аналогично для других процедур.
Тестирование и критерии приёмки
Критерии приёмки:
- При открытии файла макросы запускаются без ошибок (или показывается понятное сообщение об ошибке).
- Каждый из листов содержит заголовки Name и Value и хотя бы одну запись.
- Форматирование столбцов читаемо и не ломает существующие данные.
- Если макросы отключены, пользователь получает инструкцию, как их включить.
Тестовые случаи:
- Открыть файл с включёнными макросами на рабочей станции со стандартными правами пользователя. Ожидается: листы заполнены минимальной информацией.
- Открыть файл на машине с отключенным сервисом WMI. Ожидается: макросы отлавливают ошибку и выводят предупреждение.
- Открыть файл под администратором. Ожидается: дополнительные поля заполнены (серийные номера, пути сервисов и т.п.).
Когда этот метод не работает
- Вы используете Excel Online или Excel на macOS — VBA/WMI там не доступны.
- Макросы заблокированы корпоративными политиками безопасности.
- Служба WMI повреждена или отключена.
- Антивирус воспринимает макросы как угрозу и блокирует исполнение.
Альтернативные подходы
- PowerShell: встроенные cmdlet и WMI-запросы проще автоматизировать в среде Windows и запускать удалённо.
- WMIC (устаревающий инструмент): быстрые запросы через командную строку.
- Специализированные инвентаризационные системы (SCCM, Lansweeper) для централизованного управления.
- Сторонние утилиты (Belarc, Speccy) для локального аудита, если не хотите писать макросы.
Пример PowerShell запроса:
Get-WmiObject -Class Win32_Processor | Select-Object Name, Manufacturer, MaxClockSpeedPowerShell удобен для массовой инвентаризации по сети и интеграции с CSV.
Модель принятия решения и матрица соответствия
Ментальная модель: цель, масштаб, права, автоматизация.
- Если цель — единичная проверка, достаточно Speccy или WMIC.
- Если нужно регулярно собирать данные с одного ПК — Excel+VBA удобно.
- Если нужно централизованно инвентаризировать сотни машин — выбирайте PowerShell + централизованное решение.
Совокупность факторов:
- Время на реализацию: Excel+VBA — быстро для одиночных сценариев.
- Масштаб: Excel локально, PowerShell/инструменты для сети.
- Безопасность: подписание макросов и политика исполнения Office.
Роль‑ориентированные чеклисты
Для администратора:
- Проверить версию Excel и включение макросов.
- Убедиться, что служба WMI активна.
- Запустить обработку и проверить полноту данных.
- Подписать макросы и настроить GPO при массовом использовании.
Для энд‑пользователя:
- Сохранить файл в надёжном месте.
- При появлении запроса о безопасности нажать “Включить содержимое” только если файл проверен.
- Сообщить администратору об ошибках.
Для менеджера инвентаризации:
- Проверить шаблон отчёта и поля, которые нужны для учёта.
- Настроить экспорт нужных столбцов в CSV.
Безопасность и приватность
Important: макросы получают доступ к множеству системных данных, включая серийные номера, пути к файлам и установленные программы. Это может быть чувствительной информацией.
Рекомендации по безопасности:
- Подписывайте макросы цифровой подписью.
- Ограничьте распространение файла и храните его в защищённом хранилище.
- Используйте групповые политики для управления исполнением макросов в организации.
Примечание о конфиденциальности: при сборе данных учитывайте корпоративные политики и требования локального законодательства о персональных данных. Некоторые поля могут содержать информацию, относящуюся к пользователю.
Советы по отладке проблем WMI
- Проверка статуса службы: в службах Windows найдите Windows Management Instrumentation и убедитесь, что она запущена.
- Восстановление WMI: используйте встроенные средства восстановления WMI либо команду winmgmt /verifyrepository и winmgmt /salvagerepository.
- Логи: проверьте журнал событий Windows на ошибки WMI.
- Если ошибки связаны с правами, попробуйте запустить Excel от имени администратора.
Инструментальные шаблоны и чеклист экспорта
Таблица экспорта (рекомендуемая структура CSV):
- DeviceID — системный идентификатор
- Hostname — имя компьютера
- CPU_Name — модель процессора
- RAM_Total_MB — общий объём памяти
- Disk_Total_GB — общий объём дисков
- OS_Version — версия ОС
- Installed_Software_Count — количество установленных программ
- Last_Inventory_Date — дата опроса
При экспорте в CSV убедитесь, что данные нормализованы и не содержат переносов строки в полях Value.
Инцидентный план и откат
Если макросы нарушают работу:
- Закройте книгу и откройте Excel без включения макросов.
- Выключите автозапуск макроса: откройте ThisWorkbook и удалите (или закомментируйте) содержимое Workbook_Open().
- Восстановите резервную копию книги.
- При массовых проблемах — отозовите распространение файла и сообщите о рисках безопасности.
Совместимость и советы по миграции
- Работает: Excel для Windows (настольный) с поддержкой VBA, Windows 7 и новее. Некоторые поля могут отличаться между версиями Windows.
- Не работает: Excel Online, Excel для macOS (ограниченная поддержка WMI/VBA), мобильные версии Excel.
- При переводе скрипта в PowerShell учтите различия в возвращаемых полях и названиях свойств.
Примеры улучшений и развитие шаблона
- Добавить лист Dashboard с ключевыми показателями и графиками (CPU, свободное место на дисках, количество установленных программ).
- Экспорт результатов в единую CSV или базу данных для агрегирования по отделам.
- Добавить проверку контрольных сумм и версионирование отчётов.
Частые вопросы и ответы
Q: Можно ли запускать эти макросы удалённо на множестве компьютеров?
A: Прямо из Excel — нет. Для массового сбора используйте PowerShell и удалённые вызовы WMI (WinRM или WMI remoting) либо централизованное ПО для инвентаризации.
Q: Как избежать блокировки макросов в корпоративной сети?
A: Подпишите макросы цифровой подписью и настройте GPO, разрешающие исполнение подписанных макросов.
Заключение
WMI совместно с VBA в Excel предоставляет быстрый и гибкий способ собрать подробную информацию о компьютере без установки сторонних приложений. Подойдёт для локальной инвентаризации, создания отчётов и начальной аналитики.
При правильной настройке и учёте рисков безопасности вы получите мощный инструмент, который сэкономит время IT‑специалистов.
Image Credits: Adriano Castelli via Shutterstock.com, Mclek via Shutterstock