WMI无法初始化核心
参考微软网址:

http://www.microsoft.com/china/technet/community/scriptcenter/resources/wmifaq.mspx#EOAAC

8。WMI 不工作。如何解决这个问题?
运行脚本、诸如 CIM Studio 这样的基于 WMI 的工具或者运行 WMI 控件的时候,可能会遇到 WMI 服务错误。脚本可能不运行,或者可能收到一个“Access Denied”(拒绝访问)错误;导致这种错误的原因可能是 WMI 没有运行,或者命名空间没有被正确地配置。引起错误的原因还可能是 WMI 提供者提供的类没有被载入,或者 WMI 存储库(存储类定义的场所)已经损坏。

请遵循以下步骤来诊断 WMI 服务的 WMI 问题: 1.
 如果连接远程计算机出现故障,请在本地计算机上运行脚本。
 
2.
 重启 WMI 服务。
 
3.
 重建 WMI 存储库。
 
4.
 重新注册所有 WMI 组件。
 
5.
 重新安装操作系统。
 
6.
 联系 Microsoft 产品支持服务。
 


如果连接远程计算机出现故障,请在本地计算机上运行脚本。
如果连接远程计算机出现故障,在采取其它措施之前应该首先尝试在本地计算机上运行脚本。如果脚本可以在本地计算机上运行,请参考主题:如何使用 WMI 管理远程计算机? 如果脚本在本地计算机上也无法运行,请执行以下诊断步骤:

如果一个本地 WMI 操作返回预料之外的错误代码,或者无法启动 WMI Control,请首先确定本地 WMI 服务是否正在运行。请将以下代码保存到一个 .VBS 文件并在命令提示行运行该脚本:

 Set Svc = GetObject ("winmgmts:root\default")
如果脚本成功运行,表明 WMI 服务正常工作,它可能不是导致故障的原因。

如果脚本运行失败,请验证脚本中指定的命名空间是否是一个有效的命名空间。示例代码尝试连接 root\default 命名空间。如果该命名空间不存在,您将会得到一个错误 WBEM_E_INVALID_NAMESPACE (0x8004100E)。

如果命名空间存在,但试图连接的类不存在会怎样呢?在这种情况下,当试图访问该类时,可能会看到以下这些错误代码: ?  WBEM_E_NOT_FOUND ( 0x80041002)
 
?  WBEM_E_OUT_OF_MEMORY (0x80041006)
 


连接类失败还可能表明 WMI 存储库已经损坏。在这种情况下,您可能会看到以下错误代码中的一个: ?  WBEM_E_INITIALIZATION_FAILURE????( 0x80041014 )
 
?  WBEM_E_CRITICAL_ERROR ( 0x8004100a )
 
?  WBEM_E_FAILED ( 0x80041001)
 


如果认为存储库已经损坏,最应该采取的动作就是重建存储库。

重启 WMI 服务。
通常 WMI 服务(winmgmt)总是运行的;任何时候当计算机启动的时候它也启动,并直到计算机关闭的时候才关闭。如果该服务意外地停止了,可以在命令行键入 net start winmgmt 重启。除此之外,每次使用基于 WMI 的工具(例如 Wbemtest)或脚本连接 WMI namespace 的时候,该服务也会自动重启。通常在 WMI 服务停止的情况下运行一段使用 WMI 的脚本也会使其自动重启。

如果遇到关于 WMI 服务的故障,您也许需要手工停止并重启该服务。请按照以下步骤操作: 1.
 首先,启用 WMI 的“详细的日志记录”选项;这将在 WMI 错误日志中提供更加详细的信息,可能有助于故障的诊断。可以配置以下注册表值来启用“详细的日志记录”: 1.
 设置 HKLM\Software\Microsoft\WBEM\CIMOM\Logging 为 2。
 
2.
 设置 HKLM\Software\Microsoft\WBEM\CIMOM\Logging file Max Size 为 4000000。
 

 
2.
 停止 WMI 服务。众所周知,WMI 服务名为“winmgmt”。可以通过执行以下命令来停止该服务:
winmgmt /kill
如果正在运行 Windows XP 或 Windows Server 2003,WMI 服务运行在一个名为 Svchost 的进程之内;该进程还包含运行在同一帐户下的其他服务。除此之外,您还可能看到计算机上运行着多个 Svchost 实例。不要尝试停止 Svchost 本身;相反,请使用以下两个命令来停止 WMI 服务:winmgmt /kill 或 net stop winmgmt
 
3.
 如果步骤 2 成功,请跳过该步骤,直接进入步骤 4。如果步骤 2 没能成功停止 winmgmt 服务,请重启计算机然后进入步骤 4。
 
4.
 再次运行脚本。如果脚本运行失败,您可能需要重建 WMI Repository。
 


重建存储库。
WMI Repository 是 WMI 提供者创建的类定义的集中存储位置,它位于 %systemDrive%\%windir%\system32\wbem\Repository 文件夹。如果感觉存储库已经损坏,您应该重建它。注意:这么做可能会导致存储库中的 WMI 信息丢失。您可能需要手工恢复这些信息,方法是运行可以将信息放入存储库的特定应用程序。要重建存储库,请按以下步骤操作: 1.
 停止 WMI 服务。
 
2.
 在命令行键入以下命令:

cd /d %windir%\system32\wbem

rename Repository Rep_bak
 
3.
 这个命令将会重命名包含 WMI Repository 的文件。重命名文件之后,操作系统将无法找到存储库。在这种情况下,Windows 会在用户下次访问 WMI 的时候尝试重建存储库。如果 AutoRecover(自动恢复)机制失败,您可以尝试手工重建存储库。

通过 WMI AutoRecover 机制重建存储库: ?  建立一个到 Root\Default 的 WMI 连接;可以通过运行一段脚本或者类似 Wbemtest.exe 的基于 WMI 的工具做到这一点。如果连接成功,存储库就会被重建。如果连接失败,请尝试手工重建存储库。
 


手工重建 WMI 存储库: ?  想要手工重建存储库,应该首先编辑一个批处理文件,该文件将会向存储库补充信息。注册表键 HKLM\Software\Microsoft\WBEM\CIMOM\Autorecover MOFs 包含一个 WMI(或操作系统) 安装时的 Managed Object Format 文件(MOF 文件)列表。想要重建存储库,请将注册表值中列出的文件名复制到一个名为 WMI_Recover.bat 的批处理文件;确保包含了扩展名为 .MOF 和 .MFL 的文件。(MFL 文件中包含了类、属性和方法的本地化描述。)
在记事本中,这个批处理文件应该象下面这样:

 C:\WINDOWS\system32\WBEM\cimwin32.mof C:\WINDOWS\system32\WBEM\cimwin32.mfl C:\WINDOWS\system32\WBEM\system.mof C:\WINDOWS\system32\WBEM\wmipcima.mof C:\WINDOWS\system32\WBEM\wmipcima.mfl
 
?  在批处理文件的每行开头添加 Mofcomp 命令。Mofcomp.exe 是一个操作系统工具,用于编译 MOF 文件,并将文件中包含的信息添加到 WMI 存储库中。例如,您的批处理文件可能象下面这样:

 Mofcomp C:\WINDOWS\system32\WBEM\cimwin32.mof Mofcomp C:\WINDOWS\system32\WBEM\cimwin32.mfl Mofcomp C:\WINDOWS\system32\WBEM\system.mof Mofcomp C:\WINDOWS\system32\WBEM\wmipcima.mof Mofcomp C:\WINDOWS\system32\WBEM\wmipcima.mfl
 
?  运行这个批处理文件。
 
?  您也可以使用以下命令编译所有的 MOF 和 MFL 文件:

cd /d %windir%\system32\wbem

for %i in (*.mof,*.mfl) do Mofcomp %i
 
?  命令完成之后,请检查 .\Logs\Mofcomp.log,查看是否有编译错误发生。
 

 
4.
 再次运行脚本。
 


重新注册 WMI 组件
如果到 root\default 的连接仍然失败,无法被正确注册的 WMI 组件可能是导致故障的原因。WMI 使用的 .DLL 和 .EXE 文件位于 %windir%\system32\wbem。您也许需要重新注册该目录内的所有 .DLL 和 .EXE 文件。如果运行在 64 位的系统之上,您可能还需要检查位于 %windir%\sysWOW64\wbem 的 .DLL 和 .EXE 文件。

2 找到C:\WINDOWS\system32\wbem,将其目录下的Repository文件夹重命名为Rep_bak(可任意命名),之后重启。

1.
 要重新注册 WMI 组件,请在命令提示行运行以下命令:

cd /d %windir%\system32\wbem

for %i in (*.dll) do RegSvr32 -s %i

for %i in (*.exe) do %i /RegServer
 
2.
 再次运行脚本。