Назад | Перейти на главную страницу

WMIC возвращает ошибку при запросе продукта

Я пытаюсь автоматизировать установку MSI на моем сервере, однако, прежде чем установка может быть продолжена, мне нужно удалить предыдущую версию с сервера.

Поискав в Интернете, я обнаружил, что WMIC является необходимым инструментом, но, похоже, возникла проблема с настройкой WMI на сервере. Выполнение следующей команды приводит к ошибке:

командная строка> wmic

затем внутри инструмента

/ trace: на

продукт получает название

Это возвращает длинную строку успехов и одну неудачу:

FAIL: IEnumWbemClassObject->Next(WBEM_INFINITE, 1, -, -)
Line:    396 File: d:\nt\admin\wmi\wbem\tools\wmic\execengine.cpp

Node - ENTECHORELDEV
ERROR:
Code = 0x80041010
Description = The specified class is not valid.
Facility = WMI

Я пытаюсь запустить это на стандартной установке Windows Server 2003 R2 с правами администратора.

Спасибо

Стю

Есть много способов автоматизировать (де) установку MSI, и WMIC является одним из них. Вы думали о более простом подходе, например о пакетном файле, который:

rem Uninstall old program:
msiexec /qb /x {05EC21B8-4593-3037-A781-A6B5AFFCB19D}
rem Install new program:
msiexec /qb /i MyNewProgram.msi

(конечно, заменив указанный выше GUID на GUID вашей программы или Uninstall имя ключа).

Или вы можете использовать Интерфейс автоматизации для установщика Windows.

Или вы можете использовать WMI через VBScript или PowerShell, чтобы добиться того же, что и WMIC. Но похоже, что WMI может быть немного заброшен.

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

Во-первых, вот VBScript, который должен выводить то же, что и product get name. Сохранить в файл getProductNames.vbs и выполнить его.

Option Explicit

Dim strComputer
Dim objWMIService, colProducts, objProduct
Dim arrstrProducts(), i

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProducts = objWMIService.ExecQuery("Select * From Win32_Product")

i = 0
For Each objProduct in colProducts
    ReDim Preserve arrStrProducts(i)
    arrStrProducts(i) = objProduct.Name
    i = i + 1
Next

WScript.Echo Join(arrStrProducts, vbNewLine)

Теперь, если это сработает, попробуйте то же самое с wbemtest.

  1. Запустить wbemtest программа.
  2. Нажмите Connect...
  3. + Изменить root\default к root\cimv2, затем щелкните Connect.
  4. Нажмите Query...
  5. Войти Select * from Win32_Product, затем щелкните Apply.

Это должен вернуть список продуктов. Если это так, то WMI, вероятно, в порядке, и что-то не так с WMIC. Если сценарий сработал, но этого не произошло, попробуйте выполнить в командной строке следующее:

regsvr32 wbemdisp.dll

затем запустите wbemtest запрос снова.

Если ни сценарий, ни wbemtest работает, то, вероятно, WMI перегружен, и вам придется его ремонтировать.

Вы проверили, что поставщик WMI включен? Он не установлен по умолчанию в некоторых версиях Windows.

Установка и удаление программ -> Установка и удаление компонентов Windows -> Средства управления и мониторинга -> Поставщик установщика Windows WMI.