Гид по технологиям

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

8 min read Windows Excel Обновлено 11 Apr 2026
Сбор данных о ПК через WMI в Excel
Сбор данных о ПК через 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 и компонентов Windows

WMI доступен из языков программирования, включая VBA, который присутствует почти во всех продуктах Microsoft Office.

Подготовка книги Excel

  1. Создайте новую книгу Excel и сохраните её как файл с поддержкой макросов, например MyComputerInfo.xlsm.
  2. Пропустите Sheet1 и переименуйте следующие 11 листов: Network, LogicalDisk, Processor, Physical Memory, Video Controller, OnBoardDevices, Operating System, Printer, Software, Accounts, Services.

Эти листы будут содержать подробные данные и обновляться при каждом открытии книги.

Листы для данных WMI

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

Раздел разработчика в Excel

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

Настройка ленты Excel для отображения Разработчика

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

Модуль в редакторе VBA

Общие переменные модуля

Поместите эти строки в начало окна кода (верх модуля) — они объявляют объекты, которые будут использоваться в запросах 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 и хотя бы одну запись.
  • Форматирование столбцов читаемо и не ломает существующие данные.
  • Если макросы отключены, пользователь получает инструкцию, как их включить.

Тестовые случаи:

  1. Открыть файл с включёнными макросами на рабочей станции со стандартными правами пользователя. Ожидается: листы заполнены минимальной информацией.
  2. Открыть файл на машине с отключенным сервисом WMI. Ожидается: макросы отлавливают ошибку и выводят предупреждение.
  3. Открыть файл под администратором. Ожидается: дополнительные поля заполнены (серийные номера, пути сервисов и т.п.).

Когда этот метод не работает

  • Вы используете 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, MaxClockSpeed

PowerShell удобен для массовой инвентаризации по сети и интеграции с 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.

Инцидентный план и откат

Если макросы нарушают работу:

  1. Закройте книгу и откройте Excel без включения макросов.
  2. Выключите автозапуск макроса: откройте ThisWorkbook и удалите (или закомментируйте) содержимое Workbook_Open().
  3. Восстановите резервную копию книги.
  4. При массовых проблемах — отозовите распространение файла и сообщите о рисках безопасности.

Совместимость и советы по миграции

  • Работает: 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

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

less, more и most: читать файлы в терминале
Linux

less, more и most: читать файлы в терминале

Удаление дубликатов на Samsung — My Files
Android.

Удаление дубликатов на Samsung — My Files

Макрофотография: руководство для начинающих
Фотография

Макрофотография: руководство для начинающих

Управление подписками Xbox на Series X|S
Xbox

Управление подписками Xbox на Series X|S

Фото iPhone в стиле Instagram
Фото

Фото iPhone в стиле Instagram

Управление приоритетом процессов в Linux
Linux

Управление приоритетом процессов в Linux