WMI修复批处理

在安全模式下打开,修复,重启,问题解决

@echo on 
cd /d c:\temp
if not exist %windir%\system32\wbem goto TryInstall
cd /d %windir%\system32\wbem
net stop winmgmt
winmgmt /kill
if exist Rep_bak rd Rep_bak /s /q
rename Repository Rep_bak
for %%i in (*.dll) do RegSvr32 -s %%i
for %%i in (*.exe) do call :FixSrv %%i
for %%i in (*.mof,*.mfl) do Mofcomp %%i
net start winmgmt
goto End

:FixSrv
if /I (%1) == (wbemcntl.exe) goto SkipSrv
if /I (%1) == (wbemtest.exe) goto SkipSrv
if /I (%1) == (mofcomp.exe) goto SkipSrv
%1 /RegServer

:SkipSrv
goto End

:TryInstall
if not exist wmicore.exe goto End
wmicore /s
net start winmgmt
:End


WMI是OS的一个基础组件,很多MS软件包括一些第三方工具都是用WMI作为数据存储。好处是性能安全兼顾,坏处自然就是WMI坏了就麻烦了。客户机上最常见的就是 WMI repository 损坏,补丁无法安装。例如:

 

SCCM Client 机器上 execmgr.log 和 rebootCoordinator.log  中出现大量的

Failed to instantiate Updates UI Server {2D023958-73D0-4542-8AD6-9A507364F70E} with error 8000401a

 

典型的 WMI损坏问题,相关的信息可参考以下链接

http://social.technet.microsoft.com/forums/en-US/configmgrsum/thread/471d1211-5dbe-481f-aa85-2690b8089070/
http://trevorsullivan.net/2009/11/06/wmi-repository-corruption-sccm-client-fix/

 

WMI 损坏是无疑了,如何修复是个技术活。

 

1. 标准工具  WMIdiag.vbs    http://www.microsoft.com/download/en/details.aspx?id=7684  下载的是 exe文件,双击运行会解压出 vbs 脚本。  这个脚本本身有很长的说明部分,而且运行后,在生成的log中又详细记录了如何使用的详细信息,虽然参数繁多,但是因为说明得很详细,就不细说了。

 

2. wmidiag.vbs 是最好的工具,但是用起来确实挺复杂,而且耗时。个人建议在有问题的server上用这个工具,毕竟server 比较重要。 客户机就不必如此客气了,直接重建 WMI repository 或许是最快的方法:

a.  以下操作之前先停止   WMI 服务,net stop  winmgmt   其它一些服务可能依赖 WMI,也会提示会被停止。

 

b.  要说重建,要稍微提一下 mof 和mfl, C:\windows\system32\wbem 中的 mof 和 mfl 是建立WMI repository 的模板文件,只要这些模板文件没有丢失,就可以重建一个新的 (空的) WMI repository。 如果 MOF,MFL文件已经丢失了,要么从其它相同的机器上copy,要么用以下命令,从OS安装盘中恢复

 

rundll32.exe setupapi,InstallHinfSection WBEM 132 %windir%\inf\wbemoc.inf    ----- 注意:这个命令需要 OS CD,或者安装源文件位置。

 

c.   Win2003 (无论哪个SP level) 和 XP SP1中,系统是不会自动重建 WMI repository 的。


rundll32 wbemupgd, CheckWMISetup  ----------- 上面一个是检测,下面一个是修复
rundll32 wbemupgd, RepairWMISetup


d.    XP SP2中引入了 auto recovery的概念。在WMI repository 损坏时, OS 会自动编译那些C:\windows\system32\wbem中有 pragma autorecover 预处理指令的MOF文件,来重建WMI repository。  这个预处理指令的作用就是将该MOF文件加入自动恢复时需要编译的MOF文件列表,这个列表存储在注册表 HKLM\SOFTWARE\Microsoft\WBEM\CIMOM\autorecover mofs

 

这样,实际恢复就简单很多,

net stop winmgmt

move c:\windows\system32\wbem\Repository   c:\windows\system32\wbem\Repository.old

net start winmgmt

 

重启即可,重启时OS就会自动恢复。如果重要的机器不能重启,可以使用   rundll32 wbemupgd, UpgradeRepository -----注意 rundll32 命令,区分大小写,空格也不能写错Vista 中有了一些改进,既然不用就跳过。 Win7 更进一步,做了很多改进:

 

 ----   缺省是 autorecover,但有注册表键值可以控制它是否auto recover  HKLM\SOFTWARE\Microsoft\WBEM\CIMOM\ 下的 AutoRestoreEnabled,  1是enable,0 是disable。

 ----   winmgmt /resetRepository,还有对应的 winmgmt /VerifyRepository

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值