расширение инвентаризации при помощи MIF
Как известно, SCCM умеет инвентаризировать реестр и WMI. Часто возникает ситуация, когда собираемых сведений недостаточно и инвентаризацию нужно расширить, например, добавить в отчёт информацию о дате закупки ПК, переноса на другое рабочее место, серийный номер с наклейки на корпусе и т.д. Сделать это можно тремя способами, добавляя (или регулярно добавлять скриптами, обновляя) информацию в:
1. реестр и научить SCCM опрашивать нужные ветки и ключи;
2. WMI и научить SCCM опрашивать нужные классы;
3. MIF-файл. Учить не нужно: SCCM уже умеет вычитывать информацию из MIF-файлов (Management Information Format).
Организация Distributed Management Task Force (DMTF) занимается разработкой и поддержкой стандартов для управления системами. DMTF разработала CIM, WBEM (и его реализация на Windows — WMI), DMI и прочие стандарты, которые используются множеством вендоров. DMI — устаревший стандарт для управления программным обеспечением и аппаратными комплектующими, не зависим от вендора, операционной системы, протоколов управления и «железа».
DMI-архитектура состоит из DMI Service Provider (Service Layer — в старых спецификациях) — локальной резидентной программы, постоянно работающей в памяти, которая является связующим звеном между интерфейсом управляющей программы (Management Interface, MI), которая запрашивает информацию из MIF-базы, и DMI-совместимыми программами и аппаратными комплектующими (Component Interface, CI), которые через свой API вносят информацию в MIF-базу. Информация должна быть описана при помощи MIF — системонезависимого формата, а файлы, содержащие информацию о приложениях и комплектующих, называются MIF-файлами. Вся эта схема выглядит примерно так:
А если сказать совсем просто, то SCCM работает с DMI Service Provider через агента аппаратной инвентаризации, который умеет собирать информацию из MIF-файлов. SCCM умеет работать с IDMIF и NOIDMIF.
IDMIF — файлы с уникальным идентификатором, которые не ассоциированы с клиентом SCCM. Эти файлы отсылаются отдельно от отчёта по инвентаризации. В эти файлы вносят информацию, которая не связана напрямую с компьютером, например, имя копира или модель проектора. При удалении этих файлов с компьютера, информация из базы SCCM не удаляется.
NOIDMIF — файлы, привязанные к идентификатору компьютера, с которого они собраны. Информация из NOIDMIF прикрепляется к отчёту об инвентаризации. В эти файлы вносят информацию, связанную с компьютером, например, серийный номер и т.п. При удалении файлов с компьютера, информация удаляется из базы SCCM.
Если классы, описанные в MIF-файлах, являются уникальными, то они появятся в базе SCCM. В ином случае информация будет добавляться в уже существующие таблицы.
MIF-файлы — это ASCII-файлы, которые могут быть созданы в любом текстовом редакторе. Структура MIF-файла простая и состоит из компонента, групп внутри компонента и атрибутов внутри групп:
start component start path end path start enum end enum start group start attribute start enum end enum end attribute end group start table end table end component
Логическую вложенность можно описать так: MIF -> Component -> Group -> Class -> Attribute.
Start и End определяют область блока. Компонент внутри MIF-файла может быть только один. Группы, классы и атрибуты (внутри группы) должны иметь уникальные идентификаторы.
Типы данных, которые используются в MIF:
Определяем компонент, даём ему какое-то разумное название:
Start Component Name = "System Information"
Определяем группу атрибутов (именно это имя мы будем видеть в Resource Explorer) и класс. Класс внутри группы используется для определения группы и версии группы. Ключ является уникальным свойством, определяющим экземпляр класса. Если используется более одного экземпляра класса, ключ должен присутствовать, иначе последующие экземпляры класса будут затирать предыдущие:
Start Group Name = "SuperFirma Info" ID = 1 Class = "PCInfo" Key = 1
Определяем атрибут, используя строковый тип данных:
Start Attribute Name = "Serial Number" ID = 1 Type = String(10) Value = "556677" End Attribute
Добавляем другие атрибуты, в итоге получая вот такой файл:
Start Component Name = "System Information" Start Group Name = "SuperFirma Info" ID = 1 Class = "PCInfo" Key = 1 Start Attribute Name = "Serial Number" ID = 1 Type = String(10) Value = "556677" End Attribute Start Attribute Name = "Color" ID = 2 Type = String(20) Value = "зелёный" End Attribute Start Attribute Name = "Vidan" ID = 3 Type = String(10) Value = "2.12.2011" End Attribute Start Attribute Name = "Komu" ID = 4 Type = String(30) Value = "Маше Ивановой" End Attribute Start Attribute Name = "DopInfo" ID = 5 Type = String(50) Value = "Третий размер" End Attribute End Group End Component
Сохраняем текст в какое-то_имя.mif и проверяем его на корректный синтаксис при помощи утилиты MIFcheck:
Полученный файл помещаем в папку клиента CCM\Inventory\noidmifs. В агенте инвентаризации включаем сбор MIF-файлов:
После обновления политик на клиенте запускаем Hardware Inventory Cycle. Получив от клиента отчёт об инвентаризации, вот такие изменения наблюдаем в Resource Explorer:
В результате мы получили новый WMI-класс SMS_G_System_PCINFO, таблицу SuperFirma_Info_DATA и соответствующее ей представление v_GS_SuperFirma_Info0.
dataldr.log:
Moving MIF file C:\Program Files (x86)\Microsoft Configuration Manager\inboxes\auth\dataldr.box\H0CJNUXW.MIF to C:\Program Files (x86)\Microsoft Configuration Manager\inboxes\auth\dataldr.box\process\H0CJNUXW.MIF
Started the machine MIF processing thread, thread ID = AF0
Worker thread 4672 starting execution.
Done with job queueing.
Blocking until completion.
Thread: 0 is using GUID
Thread: 4672 will use GUID GUID:6EE8DB9B-AB50-4998-BA99-8068D806C51B
Processing Inventory for Machine: SCCM01 Version 1.87 Generated: 12/13/2011 12:56:55
CGroup::DefineGroupAndAttributes — Detected schema change. Waiting for the threads to finish the queue.
Thread 4672 has been granted exclusive access.
CGroup::DefineGroupAndAttributes — Proceeding with schema change.
Defining group Class: PCINFO…
group Name : SuperFirma Info…
CSqlSchema::CreateProcedure pSuperFirma_Info_DATA at 12/13/11 12:57:11
CSqlSchema::CreateProcedure dSuperFirma_Info_DATA at 12/13/11 12:57:11
done
Строим отчёт:
SELECT dbo.v_R_System.Name0 AS [PC name], dbo.v_GS_SuperFirma_Info0.Serial_Number00 AS [Serial number], dbo.v_GS_SuperFirma_Info0.Color0 AS Color,
dbo.v_GS_SuperFirma_Info0.Vidan0 AS [Give out], dbo.v_GS_SuperFirma_Info0.Komu0 AS [User Name], dbo.v_GS_SuperFirma_Info0.DopInfo0 AS [Additional info]
FROM dbo.v_GS_SuperFirma_Info0 INNER JOIN
dbo.v_R_System ON dbo.v_GS_SuperFirma_Info0.ResourceID = dbo.v_R_System.ResourceID
Первым делом спасибо за статью.
Появился вопрос — насколько я понял, информация, загружаемая из mif файлов, уже должна быть в них, скажем так, статически прописана. А если мы хотим собрать некую «динамическую» информацию, например значение ключа в реестре или что-то в этом роде? С помощью mif фалов это можно сделать?
Или же для решения этой задачи можно использовать только следующие вещи — формирование mif файла при помощи скрипта, который запихнет в этот самый mif всю необходимую информацию, либо правкой файла sms_def.mof?
http://myitforum.com/cs2/blogs/skissinger/archive/2010/12/01/march-cochrane-s-regkeytomof-v2-5.aspx
это понятно
имелось ввиду можно ли тоже самое сделать посредством mif файлов
спортивный интерес )
Можно заморочиться написанием скрипта, которые будет вычитывать информацию из реестра и формировать MIF-файл, но зачем?
в принципе пока что не за чем, я ж говорю — просто интересно
p.s. additional info порадовало 😀
А вот зачем как собрать серийные номера мониторов?
«http://community.spiceworks.com/scripts/show/645-get-serial-number-model-of-monitor»
выполнить на стороне клиента создать mof файл и запихнуть в него полученную инфу, интересует теперь как её от туда вытащить теперь в отчет SCCM
http://bowden-it.net/wordpress/?p=45
http://bowden-it.net/wordpress/?p=48
Благодарю за быстрый ответ, а теперь вопрос такой, что делать с машинами на которых не установлен клиент или они не в домене,решено что будет сервис, запускающий предыдущий скрипт (c поправками ) и сохранять некий отчет FTP сервере раз в день, теперь надо построить запрос и отчет в SCCM из файла на FTP.
P.S. Политика безопасности предприятия не позволяет установки клиента и ввода некоторых машин в домен.
за этот ответ с меня BAGbeer ^_^
http://technet.microsoft.com/en-us/library/bb680962.aspx
найдено решение лучше и быстрее
«http://www.myitforum.com/articles/8/view.asp?id=8489»
не надо раскатывать .net 3.5 на все машины, причем добавление WMI класса успешно прошло только на winXP 🙁
Значит, не совсем лучше?
Немного не точно написал объяснение. Про Wmi это было сказано на счет ссылок на статьи
http://bowden-it.net/wordpress/?p=45
http://bowden-it.net/wordpress/?p=48
там пакет добавление класса Win32_MonitorDetails требует .net 3.5 sp1, все отработало на winXP, на ОС выше возвращается только PnPID монитора, хотя конечно понятно что обновление поставщика Wmi делает то же что и скрипт собирающий сырую инфу из EDID.
ЗЫ. Обновление Wmi и раскатывание .net на 2к парка, очень много логов получу :), и не дай бог кто нить из админов запустит средства восстановления WMi.
зато теперь знаю что кто то не читал(пробовал) статьи 🙂 которые линканул.
закончу с MOF отпишусь о результатах
доброе утро всем, спешу поделиться что все отработало как часы (были некоторые проблемы но ни как не связанные с тем что делал с MOF.)
Речь об этом — http://www.myitforum.com/articles/8/view.asp?id=8489 ?
так точно
Спасибо, отличная статья!
Делаю свои попытки в освоении материала. Буду признателен за помощь и мысли, в преобразовании .dat файла, примерно такого содержания:
в .mif файл с целью дальнейшего сбора через SCCM информации по использованию сетевого трафика на разных интерфейсах, в частности 3G модема. Нужна помощь в написании скрипта или наставления как лучше поступить в данной ситуации?
пардон) вот так выглядит кусок нужного в обработке .dat файла
xml
total
item device=»HUAWEI Mobile Connect» apn=»ISP» starttime=»1321858191″ endtime=»1321861619″ time=»3428″ uploaded=»1921412″ downloaded=»18166608″ unitprice=»0″ fee=»0″ type=»0″
total
xml
Если информация статическая, то mif легко получить, воспользовавшись примером в посте. Если динамическая, то нужно писать скрипт, который периодически будет вычитывать данные и заносить их в mif.
Большое Спасибо! Информация, динамическая (количество item device со временем растет). Правильно ли я понимаю, дабы не перезаписывать значения собираемых атрибутов их id придется увеличивать, тем самым накапливаю нужную информацию? Нет ли под рукой примера схожего по смыслу скрипта?
Я Вас не совсем понял по поводу количества.
Если Ваш 3G-модем определяется системой, то, возможно, нужная Вам информация об устройстве есть в реестре или WMI. Тогда нужно морочиться с sms_def.mof, но это будет сделано единожды и будет применяться ко всем клиентам.
Прошу прощения за путаницу. Подразумевал, что в исходном файле с течением времени будет увеличиваться количество строк содержащих информацию про item device, а также их uploaded=»1921412? downloaded=»18166608? . Именно эту информацию, а также трафик и хотелось бы аккумулировать и не перезаписывать в отчете. Может быть для данной задачи средства инвентаризации SCCM не слишком подходят?
Если принебречь отображением в реальном времени, то SCCM может показывать исторические данные. В Вашем случае — объём трафика за сегодня, вчера, позавчера и т.д. В данном случае нужно писать скрипт, который будет регулярно считывать .dat и вносить информацию в .mif, либо единожды править sms_def.mof (если мы говорим про SCCM 2007).
Ещё можно поглядеть в сторону SCOM.
Все понял, Спасибо!)
[…] расширить инвентаризацию при помощи MIF-файлов, как это делал для SCCM 2007, но столкнулся с ошибкой при обработке отчёта […]