В Windows 2003 потерялся класс WMI – Win32_Product

repair wmiЗадался собрать с серверов данные об установленном софте средствами PowerShell используя класс WMI Win32_Product, но при первой же попытке выяснилось что класса Win32_Product

Get-WmiObject : Invalid class
At line:1 char:5
+ gwmi <<<< win32_product
+ CategoryInfo : InvalidOperation: (:) [Get-WmiObject], Managemen
tException
+ FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.C
ommands.GetWmiObjectCommand

по умолчанию нет (всякого барахла навалом а три файла по дефолту не положили :) ) и надо проявить некоторое терпение и потратить немного времени на установку нужных компонентов.

  • Устанавливаем WMI Windows Installer провайдера.
  • Открыть панель управления.
  • Открыть Add Remove Programs аплет.
  • Нажимаем Add/Remove Windows Components.
  • Выбираем Management & Monitoring Tools.
  • Нажимаем кнопку Details.
  • Ищем WMI Windows Installer Provider, выбираем его.
  • Жмем OK. Жмем Next.

В случае массовой установки придется прибегнуть к второй методике.

Для регистрации нужного компонента необходимы следующие файлы:

  • MSI.MFL
  • MSI.MOF
  • MSIPROV.DLL

Копируем файлы из дистрибутива (в сжатом виде) себе на диск, создаем текстовый файл (AnswerFile.txt) ответов следующего содержания:

[Components]
WbemMSI = On

Подготавливаем скрипт (install.bat).

expand c:\TEMP\msi.mf_ c:\windows\system32\wbem\msi.mfl
expand c:\TEMP\msi.mo_ c:\windows\system32\wbem\msi.mof
expand c:\TEMP\msiprov.dl_ c:\windows\system32\wbem\msiprov.dll
regsvr32 /s c:\windows\system32\wbem\msiprov.dll
Sysocmgr /I:\c:\windows\inf\sysoc.inf /u:c:\TEMP\AnswerFile.txt > c:\TEMP\install.txt
exit

Дальше поступаем так как больше привыкли – любым методом копируем файлы AnsverFile.txt, MSI.*_ и MSIPROV.DL_ в папку C:\TEMP на удаленном хосте.

Следующее действие будет завершающим и  опять же, кто к чему привык, запускаем на выполнение файл install.bat с помощью psexec-а или с средствами WMI.

$process = ([WMICLASS]"\\$server\ROOT\CIMV2:Win32_Process").Create("Sysocmgr /I:\c:\windows\inf\sysoc.inf /u:c:\TEMP\answerfile.txt")

Информация об авторе

Сергей Мариничев.
Вы можете присоединиться ко мне в Facebook или в Twitter.

Если Вам понравилась статья, то вы можете подписаться на RSS.
А также бесплатно подписаться по E-mail и получать актуальную информацию в числе первых.

Получать обновления на email

Вы можете оставить комментарий.

12 Комментариев »

 
  • 1# Kazun (82 комм.):

    Плохой и не нужный класс,лучше использовать реестр в разы быстрее.Некоторый пояснения дал у себя в блоге – http://wp.me/p1enQ2-5

      Цитировать

    • 2# Сергей Мариничев (687 комм.):

      Я бы поспорил насчет его нужности и ненужности. Я бы его назвал слегка «недоделанным» :)

      То что он жутко тормознутый это да…
      Таких еще поискать надо.
      Реестр в разы быстрее но ничто не мешает удалить из него ветку и тогда искать по нему нет никакого смысла.

      Есть ли возможность удаления записей из WMI?

        Цитировать

  • 3# john (73 комм.):

    Почему ненужный?
    У него есть метод удаления
    задаешь маску и найденным результатам говоришь install

      Цитировать

  • 4# Kazun (82 комм.):

    Сергей Мариничев: Я бы поспорил насчет его нужности и ненужности. Я бы его назвал слегка «недоделанным» То что он жутко тормознутый это да…Таких еще поискать надо.Реестр в разы быстрее но ничто не мешает удалить из него ветку и тогда искать по нему нет никакого смысла.Есть ли возможность удаления записей из WMI?

    Удалите,и этот класс сразу сойдет на нет.

      Цитировать

  • 6# Kazun (82 комм.):

    john: Почему ненужный?У него есть метод удалениязадаешь маску и найденным результатам говоришь install

    Более мощное средство это msiexec,так что не страшно.

      Цитировать

    • 7# John (73 комм.):

      Предполагается следующий сценарий.
      1. Вас наняли для того что бы навести порядок в неком парке в котором годами никто не принимал участия.
      2. Вы посмотрев что установлено из софта выпадаете в осадок потому что там есть все и всех версий.

      Большинство софта можно найти через реестр, у него есть методики удаления, но часть софта не отфильтровать и не удалить потому что там очень много различных версий.
      Этот софт виден через Win32_Product.
      Ответ напрашивается сам собой – почему не использовать Uninstall?

      Что бы использовать msiexec нужно иметь исходный пакет.

        Цитировать

  • 8# Kazun (82 комм.):

    Сергей Мариничев: Хороший метод Главное радикальный.

    Если посмотреть данные вывода Win32_Product,там свойство IdentifyingNumber : {ADBD6E65-46CB-4A97-9AFB-64963FEACC40},которое он берет из реестра,так что с удалением ничего не получится. =)

      Цитировать

  • 9# Kazun (82 комм.):

    John: Предполагается следующий сценарий.1. Вас наняли для того что бы навести порядок в неком парке в котором годами никто не принимал участия.2. Вы посмотрев что установлено из софта выпадаете в осадок потому что там есть все и всех версий.Большинство софта можно найти через реестр, у него есть методики удаления, но часть софта не отфильтровать и не удалить потому что там очень много различных версий.Этот софт виден через Win32_Product.Ответ напрашивается сам собой – почему не использовать Uninstall?Что бы использовать msiexec нужно иметь исходный пакет.

    Виден через Win32_Product,виден и через реестр.Метод Uninstall запрашивает строку из реестра,собственно там есть строка удаления для msiexec.Так что не убедили.

      Цитировать

    • 10# John (73 комм.):

      Оно понятно, но поиск для поиска по реестру код будет больше чем одна строка с like в запросе.

      Убедил?

      С другой стороны, если подходить основательно то можно нарисовать искалку по реестру и вызов Uninstall string из него же.

        Цитировать

  • 11# Kazun (82 комм.):

    John: Оно понятно, но поиск для поиска по реестру код будет больше чем одна строка с like в запросе.Убедил?С другой стороны, если подходить основательно то можно нарисовать искалку по реестру и вызов Uninstall string из него же.

    Отчасти,а когда требуется не только msi,тогда что?

      Цитировать

 

Добавить комментарий

XHTML: Вы можете использовать тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>