Skip to content

Инвентаризация с помощью Microsoft SMS 2003 product key (ключей) Windows XP, MS Office 2003

Хотя во всех рекламах к Microsoft Systems Management Server 2003 указано, что сей волшебный продухт делает всё что угодно, разве что кофе не готовит, и, в том числе, умеет собирать статистику о лицензионных ключах установленных на рабочих станциях ОС Windows, на практике я честно не понял как это делать. Или я чего-то не догнал или дядьки из MS подразумевали под лицензионными ключами windows не что иное как ProductID, что конечно классно, но особого практического смысла не имеет - т.к. одному и тому же Product Key соответствует стремящееся к бесконечности число ProductID (просто потому что они между собой напрямую не связаны). 

Если ничего не понятно из того, что я тут написал, то поясню - в Windows XP есть несколько понятий относящихся к лицензии (в физическом смысле, не в юридическом):
1) тип лицензии (OEM, VLK, FPP, GGK,  MSDN и прочая срань) - то что SMS распознает как "License" {0,1,2,3,4}  - естественно, GGK будет распознаваться как FPP, все академические лицензии (по непроверенным данным) как MSDN итд.
2) ProductID (он же "лицензионный ключ" в рекламках SMS 2003) - хреновина типа 12345-640-6789012-34567. в нём 640 - это тип лицензии. Т.е. мы можем узнать из ProductID тип лицензии установленной винды. В этом поле может быть:
640-643, 649 - VLK
OEM - OEM
остальные - Retail
3) Product Key (в девичестве CD-Key) - что-то типа 1GHDB-GH1DM-1G1HD-1GH1D-1GHD1 (5 групп по 5 символов). Собственно, это то что нужно, это тот самый ключ, который указан на наклейке COA, приклеенной к компьютерам с предустановленной OEM, содержащийся в коробке с Box-овой виндой, и выдающийся при покупке корпоративной винды.

Так вот, оный аццкий Microsoft Systems Management Server 2003 может собирать вроде как только ProductID и вытаскивать типы лицензий, что особого практического смысла в поиске "несертифицированных" виндов и сбору вменяемой статистики не имеет.  А счастье было так возможно. (с) Я то губы раскатал - сейчас sms_def.mof поправлю, отчетик напишу "и будет мне щастье". С офисом 2003 аналогичные яйцы, только в профиль.
Ну вот и после недолгих раздумий, проблему решил "в лоб" - не зря же везде пишут большими буквиями, что "SMS - это только транспорт":
делаем программулину, которая создает noidmif с ProductKey Windows и Office 2003 (используется у нас только он, поэтому только с ним и ковырялся), а потом его SMS и инвентаризирует благополучно в ближайший цикл hardware inventory. прошла неделя и опаньки -- вся статистика на руках.

Теперь объясняю принцип действия прибора.
Программа  PC.RAR  (написано, если можно так сказать, на Visual Basic 6) создает в папке %windir%\system32\ccm\inventory\noidmifs (папка, где по умолчанию хранит всю свою информацию advanced-клиент SMS. У людей с legacy-клиентами (и с SMS 2.0 соответственно тоже) и у людей с не дефолтной папкой для клиента SMS программа естественно будет выдавать ошибку)
файл "pc.mif" с содержимым:

Start Component
Name = "System Information"
Start Group
Name = "PC"
ID=1
Class ="PC"
Start Attribute
Name = "WinProdKey"
ID=1
Type=string(29)
Value = "{Здесь будет ключ винды }"
End Attribute
Start Attribute
Name = "OfficeProdKey"
ID=2
Type=string(29)
Value = "{Здесь будет ключ Office 2003}"
End Attribute
End Group
End Component

для проверки работоспособности просто запустите файл на любой машине с клиентом SMS 2003 и посмотрите создался ли pc.mif

Если всё создалось и всё работает нормально, не выдает никаких левых ошибок, то создаем package, а в нем programs, куда запихиваем pc.exe
пара нюансов:
-запускать программу надо с правами администратора (вообще-то это не обязательно, но я ни капли не в курсе, какие у вас расставлены права и на что в клиентских системах).
-запускать в hidden-режиме (чтобы если вдруг программке что-нибудь не понравится у вас на куче компов не появлялись левые сообщения)
-запускать лучше в режиме "whether or not a user is logged on" во вкладке "environment" program properties - т.е. не важно залогинен ли пользователь или нет. иначе на компах где локально никто не работает или где сотрудник ушел в отпуск вы будете очень долго ждать когда определятся ключики.
остальное - это уж как у вас принято, но я бы все notifications спрятал бы =)

Теперь создаем Advertisement  (сначала, по-хорошему, на какую-нибудь тестовую группу), в котором указывам запуск с периодичностью в неделю-две (не думаю, что у вас кто-то меняет ключи в системах чаще) или указываем просто однократный запуск для единовременного сбора статистики.
всё, телемаркет!
После того как на каждом компе программа запустится, пройдет цикл hardware inventory (можно на тестовом компьютере инициировать процесс вручную, чтобы посмотреть, что всё работает, только не путайте, "инициация обработки mif-файлов" запускает сбор idmif, а не noidmif, у нас же используется именно noidmif).

После успешной обработки noidmif-файла, в resource exlorer у каждого компьютера, где был успешно запущен pc.exe появится новый класс - "PC", у которого будет два атрибута - WinProdKey и OfficeProdKey (которые содержат значение ключей на этих компьютерах). Если класс не появился, значит или не был запущен pc.exe или еще не прошел цикл hardware inventory.
Всё, теперь, можно создавать отчеты или запросы (что вам проще) - для удобного просмотра и вывода статистики по ключам.

Вы можете попытаться использовать отчеты, которые делал я. Но сразу предупрежу - отчеты в SMS вещь довольно специфичная и в большинстве случаев их нельзя даже корректно импортировать в систему, с которой они были экспортированы, так что приложенные отчеты можно, скорее использовать как примеры. Посмотреть отчеты можно в соседней теме.

Note: вся хрень работает только на Microsoft Windows XP. Работает ли на других версиях (windows 2000) не знаю и ничего не гарантирую. Всё распространяется по принципу AS IS и ничего никому опять же не гарантируется. Особенно хочу заметить о важности бэкапов и тщательного тестирования чего-либо перед распространением средствами MS SMS 2003.