Инвентаризация компьютеров средствами WMI и VBScript

15
Сен
2014
Category: Windows   /   Tags: , ,

Инвентаризация компьютеров при помощи данного скрипта поможет системному администратору решить следующие задачи в масштабе небольшой организации:

  • Подготовка отчета о количестве, размещении и составе системных блоков для бухгалтерии. Информацию о других основных средствах (мониторах, ИБП, принтерах и т.п.) придется собирать другими способами.
  • Отслеживание изменений в конфигурации компьютеров, в том числе — выявление случаев самовольной замены комплектующих.
  • Поиск, отбор и подсчет компьютеров с заданными характеристиками при планировании закупок или при решении каких-либо технических вопросов.

Возможности и особенности

Предлагаемый скрипт позволяет:

  1. Собирать сведения о конфигурации множества компьютеров тремя разными способами — локально (если нет доступа по сети), удаленно (с рабочего места администратора), через logon-скрипт.
  2. Сохранять отчеты о конфигурации компьютера в структурированный текстовый файл формата CSV, удобный для последующей автоматизированной обработки.
  3. Создавать настраиваемый общий отчет по всем имеющимся компьютерам.

Отличительные особенности скрипта:

  1. Используются встроенные в Windows 2000/XP/2003/Vista компоненты VBScript и WMI. Установка и лицензирование дополнительных программ не требуется.
  2. В программном коде можно настроить состав и структуру отчета под свои нужды. При желании не трудно добавить вывод отчетов в других текстовых форматах (TXT, INI, HTML, XML), удобных для просмотра, печати или импорта в других программах.
  3. Собираются и выводятся в отчет только действительно нужные для решения поставленных задач сведения. Скрипт не предназначен для сбора исчерпывающей информации о составе системного блока.

Загрузка и установка

Скрипт для инвентаризации компьютеров средствами WMI и VBScript, упакован ZIP: invent_comp.zip

Установка не требуется, достаточно распаковать архив в отдельный каталог на рабочей станции администратора.

Первый этап работы — сбор данных

Скрипт invent_comp.vbs собирает данные о конфигурации указанного компьютера и сохраняет отчет в формате CSV в заданный локальный каталог или на сетевой ресурс. Имя файла отчета соответствует сетевому имени компьютера. Есть несколько вариантов запуска.

Вариант 1 — для тестирования или для отдельных сетевых компьютеров и серверов

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

Вариант 2 — для сетевых рабочих станций

Скрипт может работать в «тихом» режиме, т.е. не выводить диалоги, собирать данные о локальном компьютере и сохранять отчет на заранее определенный сетевой ресурс. Таким образом возможен автоматический запуск на всех рабочих станциях сети, например при их включении. Для этого варианта запуска лучше создать и использовать отдельную копию файла.

Сначала необходимо выделить сетевой ресурс для сохранения отчетов и дать разрешение на запись пользователю (или группе пользователей), от имени которого будет запускаться скрипт.

Настройки в самом скрипте такие:

Затем следует настроить запуск скрипта через logon-скрипт или групповую политику. Необходимо учитывать, что для обращения к компоненту WMI нужны права администратора — поэтому в групповой политике лучше включать скрипт в конфигурацию компьютера, а не пользователя.

Вариант 3 — для компьютеров, не подключенных к сети

Если есть компьютеры, данные по которым невозможно собрать другими способами, можно скопировать скрипт на переносной диск и запускать с него. Настройки взять из варианта 1, собранные отчеты добавить к остальным.

Формат отчета с результатами
Результаты сохраняются в текстовый файл формата CSV. Каждая строка файла состоит из 4 полей, разделенных символом ; («точка с запятой»):

      • Тип компонента — используется для группировки;
      • Название параметра;

Номер экземпляра (целое число) — нужен для различения нескольких компонентов одного типа;

    • Значение параметра.

Если в значении какого-либо параметра встретится символ ;, он будет заменен на символ _. Значения полей не заключаются в кавычки. Первая строка содержит заголовки столбцов. При желании можно отключить добавление этой строки в настройках:

Пример отчета:

Второй этап работы — составление общего отчета

Полученные на первом этапе отчеты можно не только просматривать по-отдельности, но и свести в одну таблицу. Скрипт invent_comp_report.vbs просматривает заданный каталог и из всех найденных там отчетов извлекает данные.

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

Не все данные из отдельного отчета нужны в общем отчете. Какие столбцы и в каком порядке попадут в общий отчет определяется в программном коде через массив:

После запуска скрипта invent_comp_report.vbs будет создан файл в формате XHTML, который можно открыть в браузере, импортировать в OpenOffice.org Calc или Microsoft Excel (не проверено).

В таблице каждому компьютеру соответствует одна строка. Если на компьютере есть несколько комплектующих одного типа, то они оформляются в виде списка.

Для дополнительной обработки табличного отчета и вывода на печать предлагается использовать специально предназначенные для этого программы, например, OpenOffice.org Calc.

Тонкая настройка скрипта

Добавление и удаление параметров

Какие параметры и в каком порядке попадут в отчет определяется в программном коде процедуры InventComp. Каждой секции отчета, содержащей сведения по всем экземплярам какого-либо класса компонентов, соответствует один вызов подпрограммы Log. Вот пример:

Параметры вызова подпрограммы разнесены на несколько строк для наглядности. Третий параметр чаще всего — пустая строка, и поэтому расположен на одной строке со вторым.

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

  1. «Win32_ComputerSystem» — класс WMI, к которому идет запрос.
  2. «Name,Domain,PrimaryOwnerName… — свойства WMI (через запятую), значения которых надо включить в отчет.
  3. «» — условие отбора по правилам WQL (подробности далее), или пустая строка.
  4. «Компьютер» — название соответствующей секции отчета, выводится в первом столбще CSV-файла.
  5. «Сетевое имя,Домен,Владелец… — названия параметров (через запятую), соответствующих перечисленным выше свойствам WMI, в том же порядке и количестве, выводится во втором столбце CSV-файла.

Чтобы корректно добавить или изменить подобный вызов, необходимо найти и изучить документацию по соответствующему WMI-классу:

  1. Описание классов WMI в MSDN
  2. WMI Platform SDK, если удастся найти

Также для составления и тестирования запросов к WMI можно использовать программы:

  1. Microsoft WMI Object Browser — работает через web-интерфейс, входит в состав «WMI Administrative Tools»
  2. WMI Explorer — не требует установки, автор Alexander Kozlov

Удаление ненужных значений

Чтобы в отчет не попадали отключенные сетевые адаптеры, минипорты и виртуальные адаптеры VMware, в запросе к классу Win32_NetworkAdapter добавлено условие:

Чтобы в отчет попадали только локальные принтеры, подключенные через порт USB или LPT, в запросе к классу Win32_Printer добавлено условие:

Чтобы в секцию отчета «Диск» попадали данные только о жестких дисках, в запросе к классу Win32_DiskDrive добавлено условие:

Соответственно, чтобы в секцию отчета «Логический диск» также попадали данные только о разделах жестких дисков, в запросе к классу Win32_LogicalDisk добавлено условие:

В Windows 2000 компонент WMI не поддерживает некоторые WMI-классы, например сетевые адаптеры и принтеры. Причем, если все-таки отправить некорректный запрос, не вернется ни ответа, ни сообщения об ошибке — создание отчета просто прекратится. Поэтому добавлена проверка версии WMI-сервера — запрос выполняется только если номер сборки операционной системы больше или равен 2600 (Windows XP/2003):

Видеоадаптеры ATI, имеющие два выхода отображаются как два отдельных адаптера, причем в названии второго есть слово «Secondary». Чтобы в отчете не отображались такие «двойники», в запросе к классу Win32_VideoController добавлено условие:

Формат значений

Размер дисков и объем памяти в WMI выдается в байтах. Чтобы в отчете значения какого-либо параметра выводились в более привычных кратных единицах, достаточно в конце названия параметра добавить условные символы (Мб) или (Гб). В скрипте есть проверка этих условных символов:

Значения, имеющие тип «дата и время» распознаются по свойству CIMType и автоматически преобразуются в читаемый вид:

Если значение является массивом (например, перечень поддерживаемых форматов бумаги у принтера — свойство PrinterPaperNames класса Win32_Printer), то все значения автоматически «склеиваются» в строку с запятой в качестве разделителя:

Возможные проблемы и способы их устранения

При тестировании скрипта замечены такие ошибки:

Проблема Вероятная причина Как устранить
Сообщение «Компьютер удаленного сервера не существует или недоступен» Доступ к службе WMI удаленного компьютера заблокирован брандмауэром. Отключить службу брандмауэра, подключившись к удаленному компьютеру через консоль (оснастку) «Управление компьютером».
Сообщение «Разрешение отклонено» Не удается создать новый или обновить существующий файл отчета. Проверить, что в настройках скрипта указан нужный каталог для сохранения отчетов, файл отчета не занят другой программой и для него не установлен атрибут «только чтение», у скрипта достаточно разрешений на запись.
Сообщение «Объект не поддерживает это свойство или метод» Некоторые свойства объектов WMI не поддерживаются Windows 2000. При обращении к таким свойствам возникает ошибка. Например, при подключении к Windows 2000 такую ошибку вызывает обращение к свойствам ‘NetConnectionStatus’, ‘AdapterType’ элемента коллекции ‘Win32_NetworkAdapter’. Проверить в документации по WMI, какие свойства не поддерживаются в некоторых ОС и перед обращением к таким свойствам проверять версию ОС или вообще их не использовать.
Неправильно определяется процессор Intel Core 2 в XP Это неточность компонента WMI, см. статью Microsoft на эту тему. Цитата: The data that is returned indicates that the CPU name is «Intel Pentium III Xeon» or «Intel Pentium III.» However, System Properties or System Information (MSInfo32.exe) shows the name as «Intel(R) Core(TM)2 Duo CPU E8000». В упомянутой статье есть ссылка для загрузки исправления.
Неправильно определяется процессор Intel Celeron в XP Это неточность компонента WMI, см. статью Microsoft на эту тему. В упомянутой статье есть ссылка для загрузки исправления.
Не появляется окно «Отчет сохранен в файл», создание отчета останавливается Отправлен некорректный WMI-запрос — допущена синтаксическая ошибка или запрошенное свойство не поддерживается. Найти, исправить или отключить некорректный WMI-запрос.

(c) http://zheleznov.info

Яндекс.Метрика