查询产品时WMIC返回错误

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

在互联网上search我发现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与pipe理员privelages运行此。

谢谢

斯图

自动化(un)安装MSI有很多方法,WMIC就是其中之一。 你有没有想过一个更简单的方法,就像一个batch file:

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

(当然,使用程序的GUID或Uninstall键名replace上面的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\default更改为root\cimv2 ,然后单击Connect
  4. 点击Query...
  5. inputSelect * from Win32_Product ,然后单击Apply

这应该返回一个产品列表。 如果是这样的话,那么WMI可能就不错了,而WMIC也是如此。 如果脚本正常工作,但没有,请在命令提示符处尝试以下操作:

 regsvr32 wbemdisp.dll 

然后再次运行wbemtest查询。

如果脚本和wbemtest不起作用,那么WMI可能是超级的,你将不得不修复它。

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

添加/删除程序 – >添加/删除Windows组件 – >pipe理和监视工具 – > WMI Windows安装程序提供程序。