WMIC 在查询产品时返回错误

WMIC 在查询产品时返回错误

我正在尝试在我的服务器上自动安装 MSI,但是在安装进行之前,我需要从服务器上卸载以前的版本。

在网上搜索后,我发现 WMIC 是所需的工具,但服务器上 WMI 的设置似乎存在问题。运行以下命令会出现错误:

命令提示符>wmic

然后在工具里面

/跟踪:上

产品获取名称

这将返回一长串的成功和一次失败:

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 的标准安装上运行它。

谢谢

斯图

答案1

有很多方法可以自动安装(卸载)MSI,WMIC 就是其中之一。您是否考虑过一种更简单的方法,例如执行以下操作的批处理文件:

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

(当然,用你的程序的 GUID 或Uninstall键名替换上面的 GUID)。

或者,您可以使用Windows 安装程序的自动化接口

或者,您可以通过 VBScript 或 PowerShell 使用 WMI 来完成与 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\defaultroot\cimv2,然后单击Connect
  4. 点击Query...
  5. 输入Select * from Win32_Product,然后单击Apply

这应该会返回产品列表。如果返回,则 WMI 可能没有问题,而 WMIC 出了问题。如果脚本有效,但这个无效,请在命令提示符下尝试以下命令:

regsvr32 wbemdisp.dll

然后再次运行wbemtest查询。

如果脚本和wbemtest工作都不起作用,那么 WMI 可能受到了严重影响,您必须修复它。

答案2

您是否已确认 WMI 提供程序已启用?在某些版本的 Windows 上,它不是默认安装的。

添加/删除程序 -> 添加/删除 Windows 组件 -> 管理和监控工具 -> WMI Windows 安装程序提供程序。

相关内容