如何备份WMI/CIM命令及相关类?误删类的恢复方法
误删WMI类后的恢复方法及事前备份方案
一、误删WMI类后的恢复方式
如果不小心用Remove-WmiObject或Remove-CimInstance删除了WMI类,可以通过以下几种方法恢复:
1. 系统还原恢复
找到删除操作之前创建的系统还原点,执行系统还原,这是最省心的方式,能直接恢复整个WMI存储库到删除前的状态。
2. 重新编译MOF文件(针对系统自带类)
系统自带的WMI类都有对应的MOF文件存储在C:\Windows\System32\wbem\MOF\目录下,找到对应类的MOF文件,用mofcomp命令重新编译:
# 以root/subscription下的类为例,编译对应的eventmgt.mof mofcomp C:\Windows\System32\wbem\MOF\eventmgt.mof
编译完成后重启WMI服务生效:
Restart-Service winmgmt
3. 从同版本系统复制存储库
找一台和目标机器Windows版本、补丁级别完全一致的正常机器,停止WMI服务后复制其C:\Windows\System32\wbem\Repository目录下的所有文件,替换到目标机器的对应目录,最后重启WMI服务。
二、事前备份WMI的方案
当然可以在操作前提前备份WMI相关内容,避免误删后麻烦,主要有两种备份方式:
1. 备份WMI存储库目录
- 先停止WMI服务:
Stop-Service winmgmt -Force - 复制
C:\Windows\System32\wbem\Repository整个目录到安全的备份位置(比如D:\WMI_Backup) - 重新启动WMI服务:
Start-Service winmgmt
后续如果出现问题,停止服务后替换回备份的目录即可恢复。
2. 导出WMI类定义到MOF文件
用mofcomp命令将指定命名空间的类定义导出成MOF文件,后续可以直接编译恢复:
# 导出root/subscription命名空间的所有类到备份文件 mofcomp -n:root/subscription -export root_subscription_backup.mof
如果类被误删,执行以下命令恢复:
mofcomp root_subscription_backup.mof
操作示例
步骤1:删除WMI类
Get-WmiObject -Namespace "root/subscription" -Class "NTEventLogEventConsumer" Remove-WmiObject -Namespace "root/subscription" -Class "NTEventLogEventConsumer"
步骤2:验证类已删除(执行命令报错)
Get-WmiObject -Namespace "root/subscription" -Class "NTEventLogEventConsumer"
报错信息:
Get-WmiObject : Invalid class
At line:1 char:14
- Get-WmiObject <<<< -Namespace "root/subscription" -Class "NTEventLogEventConsumer"
- CategoryInfo : InvalidOperation: (:) [Get-WmiObject], ManagementException
- FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
内容的提问来源于stack exchange,提问作者Ichigo Kurosaki
相关产品推荐
相关产品推荐

