关于WMI的问题

关于 WMI 的问题
运行脚本、诸如  CIM Studio  这样的基于  WMI  的工具或者运行  WMI 控件的 时候,可能会遇到  WMI  服务错误。脚本可能不运行,或者可能收到一个 “Access Denied” (拒绝访问)错误;导致这种错误的原因可能是  WMI  没有运行,或者命名空间没有被正确地配置。引起错误的原因还可能是  WMI  提供者提供的类没有被载入,或者  WMI  存储库(存储类定义的场所)已经损坏。  
请遵循以下步骤来诊断  WMI  服务的  WMI  问题:
1. 
如果连接远程计算机出现故障,请在本地计算机上运行脚本。  
2. 
重启  WMI  服务。  
3. 
重建  WMI  存储库。  
4. 
重新注册所有  WMI  组件。  
5. 
重新安装操作系统。  

如果连接远程计算机出现故障,请在本地计算机上运行脚本
如果一个本地  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 2003WMI 服务运行在一个名为 Svchost 的进程之内;该进程还包含运行在同一帐户下的其他服务。除此之外,您还可能看到计算机上运行着多个 Svchost 实例。不要尝试停止 Svchost 本身;相反,请使用以下两个命令来停止 WMI 服务:winmgmt /kill  net stop winmgmt
3. 
如果步骤 2 成功,请跳过该步骤,直接进入步骤 4。如果步骤 2 没能成功停止 winmgmt 服务,请重启计算机然后进入步骤 4 
4. 再次运行脚本。如果脚本运行失败,您可能需要重建 WMI Repository 
重建存储库
WMI Repository 
 WMI 提供者创建的类定义的集中存储位置,它位于 %systemDrive%/%windir%/system/wbem/Repository 文件夹。如果感觉存储库已经损坏,您应该重建它。注意:这么做可能会导致存储库中的 WMI 信息丢失。您可能需要手工恢复这些信息,方法是运行可以将信息放入存储库的特定应用程序。要重建存储库,请按以下步骤操作:
1. 
停止 WMI 服务。
2. 在命令行键入以下命令:
cd /d %windir%/system/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/syst
em/WBEM/cimwin32.mof
C:/WINDOWS/syst
em/WBEM/cimwin32.mfl
C:/WINDOWS/syst
em/WBEM/system.mof
C:/WINDOWS/syst
em/WBEM/wmipcima.mof
C:/WINDOWS/syst
em/WBEM/wmipcima.mfl
• 
在批处理文件的每行开头添加 Mofcomp 命令。Mofcomp.exe 是一个操作系统工具,用于编译 MOF 文件,并将文件中包含的信息添加到 WMI 存储库中。例如,您的批处理文件可能象下面这样: 
Mofcomp C:/WINDOWS/syst
em/WBEM/cimwin32.mof
Mofcomp C:/WINDOWS/syst
em/WBEM/cimwin32.mfl
Mofcomp C:/WINDOWS/syst
em/WBEM/system.mof
Mofcomp C:/WINDOWS/syst
em/WBEM/wmipcima.mof
Mofcomp C:/WINDOWS/syst
em/WBEM/wmipcima.mfl
• 
运行这个批处理文件。
• 您也可以使用以下命令编译所有的 MOF  MFL 文件:
cd /d %windir%/system/wbem
for %i in (*.mof,*.mfl) do Mofcomp %i
• 
命令完成之后,请检查 ./Logs/Mofcomp.log,查看是否有编译错误发生。
4. 再次运行脚本。 
重新注册 WMI 组件
如果到 root/default 的连接仍然失败,无法被正确注册的 WMI 组件可能是导致故障的原因。WMI 使用的 .DLL  .EXE 文件位于 %windir%/system/wbem。您也许需要重新注册该目录内的所有 .DLL  .EXE 文件。如果运行在 64 位的系统之上,您可能还需要检查位于 %windir%/sysWOW64/wbem  .DLL  .EXE 文件。
1. 要重新注册 WMI 组件,请在命令提示行运行以下命令:
cd /d %windir%/system/wbem
for %i in (*.dll) do RegSvr32 -s %i
for %i in (*.exe) do %i /RegServer 
2. 
再次运行脚本。
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值