windows server 2025,windows 11 ,启用WMIC命令的方法。桌面端 Win10/Win11:WMIC 属于 Windows 可选能力 (Capability),CapabilityName: WMIC~~~~ Windows Server 2022/2025:IIS‑WMICompatibility(IIS 6 WMI兼容性),属于服务器角色功能 (Feature)

WMIC (英文全称Windows Management Instrumentation Command-line)是 Windows 管理工具(WMI)的命令行界面,允许用户查询和管理系统设置、配置以及 Windows 操作系统的其他方面。

WMIC(Windows Management Instrumentation Command-line)是 Windows 操作系统中的一个命令行工具,它提供了一个与 Windows 管理工具(WMI)交互的接口。WMIC 允许用户通过命令行查询和管理系统信息、硬件设备、软件配置、进程等系统设置。通过 WMIC,用户可以执行多种管理任务,如获取系统性能信息、管理用户账户、查看磁盘状态等。

WMIC (Windows Management Instrumentation Command-line) 功能分类的表格化概览:

功能类别 功能描述
系统信息查询 提供系统硬件、操作系统、服务等的详细信息。例如:wmic oswmic cpuwmic memorychip
硬件设备管理 获取和管理硬件信息,如 CPU、硬盘、内存、显示器、网络适配器等。例如:wmic diskdrivewmic nic
进程管理 获取、启动、停止进程等。例如:wmic processwmic process where "name='processname'" call terminate
软件与应用管理 查询和管理已安装的软件或应用程序。例如:wmic productwmic service
网络配置与状态 获取网络适配器、IP 配置、网络连接等信息。例如:wmic nicconfigwmic path win32_networkadapter
用户和账户管理 管理本地用户账户和组信息。例如:wmic useraccountwmic group
磁盘与存储管理 查询磁盘驱动器和分区的详细信息。例如:wmic logicaldiskwmic volume
电源管理 获取电池、适配器等电源相关的设备信息。例如:wmic path Win32_Battery
打印机管理 查询和管理打印机设备。例如:wmic printer
事件查看与日志 获取事件日志和错误报告。例如:wmic ntevent

这些分类涵盖了 WMIC 的常用功能,用户可以通过不同的命令查询系统的硬件、软件、进程、网络等信息,并进行一些管理任务。

WMIC(Windows Management Instrumentation Command-line) 操作模式的分类及相关功能的表格:

操作模式 功能描述 示例命令
查询模式(Query Mode) 用于查询系统信息、硬件信息、配置状态等。通过查询语句从 WMI 类获取数据。 wmic cpu get caption, maxclockspeed
执行模式(Execute Mode) 用于执行 WMI 方法(如启动、停止进程、调用服务等)或更改系统配置。 wmic process where name="notepad.exe" call terminate
设置模式(Set Mode) 用于更改某些系统设置或配置,如设置用户密码、更改服务状态等。 wmic service where name="wuauserv" call change startmode="disabled"
别名模式(Alias Mode) 用于列出和使用 WMIC 别名(即 WMI 类别),简化常见查询。 wmic alias list brief
输出重定向模式(Redirect Mode) 用于将 WMIC 的输出结果重定向到文件中,方便后续分析。 wmic os get caption > os_info.txt
批处理模式(Batch Mode) 用于批量执行多个命令,常用于自动化脚本中,执行一组操作。 创建一个包含多个 WMIC 命令的批处理文件(如 .bat 文件)
条件查询模式(Where Clause Mode) 用于在查询中添加条件,从而获取更精确的信息。 wmic process where "name='notepad.exe'" get processid, caption
帮助模式(Help Mode) 提供 WMIC 命令及其语法的帮助信息。 wmic /?
版本信息模式(Version Mode) 查看 WMIC 工具的版本信息。 wmic /version

解释:

  • 查询模式:主要用于从 WMI 中查询信息,返回系统或硬件配置数据。
  • 执行模式:执行某些方法,如停止进程、管理服务等。
  • 设置模式:更改系统设置、启动模式等。
  • 别名模式:列出和使用 WMI 别名类,简化查询。
  • 输出重定向模式:将命令的输出结果保存到文件。
  • 批处理模式:允许通过批处理脚本执行多个 WMIC 命令。
  • 条件查询模式:在查询时加入特定条件,获取更精准的信息。
  • 帮助模式:查看 WMIC 工具的帮助和使用说明。
  • 版本信息模式:查看 WMIC 的版本信息,通常用于确认工具的当前版本。

这些操作模式帮助用户根据需求灵活地查询和管理 Windows 系统的配置和状态。

WMIC为什么被禁用,未来移除?

WMIC(Windows Management Instrumentation Command-line)命令工具被弃用的原因与多方面的技术和设计考虑有关。主要原因包括:

1. PowerShell 的强大功能

  • PowerShell 替代:微软推出了 PowerShell,并逐渐将其作为主要的系统管理工具。PowerShell 提供了比 WMIC 更强大、更灵活的功能,尤其在脚本化和自动化管理方面。PowerShell 不仅支持 WMI,还支持更复杂的对象模型、管道、模块等功能,使得它成为了管理和自动化任务的首选工具。
  • PowerShell 可以访问 WMI 和其他系统管理工具:PowerShell 本身也可以通过 Get-WmiObject 或 Get-CimInstance 等命令与 WMI 进行交互,提供比 WMIC 更丰富的功能和更简洁的语法。

    PowerShell 通过 Get-WmiObjectGet-CimInstance 命令能够与 Windows 管理工具(WMI)进行交互,并能提供比 WMIC 更加丰富的功能和简洁的语法。这些命令允许你查询、管理和操作 Windows 系统中的许多组件和服务。下面是一些常见的示例,展示如何使用这两个命令。

    1. 查询操作系统信息

    使用 Get-WmiObject

    powershellCopy Code
    Get-WmiObject -Class Win32_OperatingSystem

    此命令将返回有关当前操作系统的详细信息,包括操作系统版本、构建号、安装日期等。

    使用 Get-CimInstance

    powershellCopy Code
    Get-CimInstance -ClassName Win32_OperatingSystem

    Get-CimInstance 是 PowerShell 3.0 及之后版本引入的命令,通常建议使用它,因为它在远程管理和性能上比 Get-WmiObject 更加高效。

    2. 获取处理器信息

    使用 Get-WmiObject

    powershellCopy Code
    Get-WmiObject -Class Win32_Processor

    这个命令会列出有关计算机中所有处理器的信息,例如处理器的名称、核心数、线程数等。

    使用 Get-CimInstance

    powershellCopy Code
    Get-CimInstance -ClassName Win32_Processor

    Get-WmiObject 类似,Get-CimInstance 返回类似的处理器信息。

    3. 获取内存信息

    使用 Get-WmiObject

    powershellCopy Code
    Get-WmiObject -Class Win32_PhysicalMemory

    此命令会列出计算机中所有物理内存条的详细信息,包括容量、制造商、速度等。

    使用 Get-CimInstance

    powershellCopy Code
    Get-CimInstance -ClassName Win32_PhysicalMemory

    通过 Get-CimInstance 查询内存信息,得到的输出同样包括内存的详细信息。

    4. 查询磁盘驱动器信息

    使用 Get-WmiObject

    powershellCopy Code
    Get-WmiObject -Class Win32_DiskDrive

    此命令会返回有关硬盘驱动器的信息,例如型号、容量、接口类型等。

    使用 Get-CimInstance

    powershellCopy Code
    Get-CimInstance -ClassName Win32_DiskDrive

    同样,Get-CimInstance 会提供类似的信息,但在处理大量数据时性能较好。

    5. 查询系统服务

    使用 Get-WmiObject

    powershellCopy Code
    Get-WmiObject -Class Win32_Service

    该命令列出了当前计算机上所有运行的系统服务及其状态。

    使用 Get-CimInstance

    powershellCopy Code
    Get-CimInstance -ClassName Win32_Service

    通过 Get-CimInstance 获取的系统服务信息与 Get-WmiObject 相似,但通常执行速度更快。

    6. 获取网络适配器信息

    使用 Get-WmiObject

    powershellCopy Code
    Get-WmiObject -Class Win32_NetworkAdapter

    此命令返回有关网络适配器的信息,包括适配器名称、MAC 地址、连接状态等。

    使用 Get-CimInstance

    powershellCopy Code
    Get-CimInstance -ClassName Win32_NetworkAdapter

    这同样会返回网络适配器的详细信息,但 Get-CimInstance 在跨网络或远程查询时表现更佳。

    7. 获取事件日志信息

    使用 Get-WmiObject

    powershellCopy Code
    Get-WmiObject -Class Win32_NTLogEvent

    此命令返回事件日志中的所有条目。你可以根据 EventCodeTimeGenerated 等字段筛选具体的日志。

    使用 Get-CimInstance

    powershellCopy Code
    Get-CimInstance -ClassName Win32_NTLogEvent

    Get-CimInstance 也可以用来获取事件日志信息,性能更高。

    8. 查询操作系统的启动时间

    使用 Get-WmiObject

    powershellCopy Code
    (Get-WmiObject -Class Win32_OperatingSystem).LastBootUpTime

    这将返回操作系统上次启动的时间。

    使用 Get-CimInstance

    powershellCopy Code
    (Get-CimInstance -ClassName Win32_OperatingSystem).LastBootUpTime

    Get-CimInstance 同样可以返回操作系统的启动时间,通常它比 Get-WmiObject 更高效。

    9. 列出当前的用户会话

    使用 Get-WmiObject

    powershellCopy Code
    Get-WmiObject -Class Win32_ComputerSystem

    这个命令列出了当前计算机的用户会话信息。

    使用 Get-CimInstance

    powershellCopy Code
    Get-CimInstance -ClassName Win32_ComputerSystem

    同样返回当前用户会话信息,但 Get-CimInstance 的表现通常更优。

     

    • Get-WmiObject 和 Get-CimInstance 都能够访问 Windows Management Instrumentation(WMI)数据源,并返回系统管理和硬件组件的信息。
    • Get-CimInstance 是现代化的命令,更加高效,特别是在处理大量数据或远程管理时,相较于 Get-WmiObject 具有更好的性能。
    • PowerShell 提供了更简洁的语法和更多的功能,可以轻松地进行数据筛选和格式化,因此它已经逐渐取代了传统的 WMIC 工具。

    这些示例展示了如何利用 PowerShell 强大的命令来获取 Windows 系统中的各种管理信息,帮助用户更高效地进行系统管理和自动化任务。

2. 不再更新和维护

  • 技术陈旧:WMIC 是基于早期的 WMI(Windows Management Instrumentation)接口,它已经没有得到足够的更新和改进。微软逐步将重心转向 PowerShell,这意味着 WMIC 不再作为优先更新和维护的工具。
  • 长期支持性差:随着 Windows 操作系统版本的更新,WMIC 的一些功能逐渐不再支持或无法适应新的需求。

3. 更好的用户体验

  • PowerShell 的用户体验更优:PowerShell 提供了更丰富的命令和功能,以及更强大的调试和脚本化能力。它支持更复杂的管理任务,并且更符合现代 IT 管理员的需求。
  • 模块化和扩展性:PowerShell 具有更强的模块化设计,允许用户加载并扩展许多外部模块,这使得它的功能更加丰富和灵活。

4. 跨平台支持

  • PowerShell 的跨平台性:PowerShell 现在已经支持 Windows、Linux 和 macOS,这使得它可以作为跨平台的管理工具。而 WMIC 是 Windows 专用的工具,不具备跨平台的功能。

5. 性能和可扩展性

  • 性能限制:WMIC 在执行复杂查询或与大量数据交互时,可能会显得较慢或效率较低。而 PowerShell 提供了更高效的命令处理和更好的性能,特别是在处理大规模数据时,能够提供更高的效率和灵活性。

6. 逐步淘汰

  • 微软的战略方向:微软在其官方文档中明确指出,WMIC 已经被弃用,未来不会继续更新和支持 WMIC。微软的未来发展重点将放在 PowerShell 和其他现代工具上,这也促使 IT 管理员逐步转向 PowerShell。

WMIC 完整拆解

核心结论先行:被弃用的只有 wmic.exe 这个命令行外壳程序,底层 WMI 架构、winmgmt 服务、所有 WMI Provider 全部保留并继续受支持。WMIC ≠ WMI,很多人会混淆这一点。 IIS-WMICompatibility 不是 WMIC,是 IIS6 的旧版 WMI 命名空间兼容组件;你贴出来的 Dism /Online /Get-Features 看到的 IIS-WMICompatibility 和 wmic.exe 是两套完全独立的东西,很多文档容易把两者弄混。

一、底层原理

WMIC = Windows Management Instrumentation Command-line,XP SP2 引入,原生 C++ 写的独立命令行客户端,本质是一个 WMI COM API 的命令行封装器。

  1. 启动 wmic.exe → 通过 wbemcli.dll 的 COM 接口 IWbemLocator 连接本地 / 远程 winmgmt(WMI 服务)
  2. 解析命令行查询语句(WQL),转发给 WMI 引擎
  3. WMI 引擎调用对应 Provider DLL 采集系统信息,返回对象实例
  4. WMIC 把 WMI 对象实例转换成纯文本表格输出到控制台

架构对比

  • WMIC:DCOM 为默认远程传输,老旧 COM 模型,没有对象管道,只能输出文本
  • PowerShell CIM(Get-CimInstance):现代栈,优先 WinRM (WS-Man),本地可回退 DCOM;直接返回 .NET 对象,原生支持管道、类型、序列化、跨平台 PowerShell7

弃用底层根源,不只是 “PowerShell 更强”

  1. WMIC 是单独维护的 C++ 客户端,维护成本高;WMI 团队需要同时维护两套客户端(WMIC + PowerShell WMI/CIM)
  2. 基于老旧 DCOM,远程安全模型老旧,历史高危漏洞多(如 CVE-2017-0199)
  3. 输出只有文本,无法结构化处理,不适合现代自动化;无法适配 PowerShell Core(跨平台)
  4. 命令语法自成一套(WQL+WMIC 参数),和 PowerShell 生态割裂
  5. 微软战略:统一管理入口收敛到 PowerShell/CIM,减少遗留组件攻击面

时间线:Win10 21H1 正式标记 WMIC 弃用;Win11 22H2 转为 FoD 按需可选包;2026 年 8 月后 Win11 24H2/25H2 彻底移除,不再能通过 Add-Capability 装回 WMIC,但 WMI 服务继续保留Microsoft ...。

二、依赖文件 & 依赖关系

WMIC(wmic.exe)依赖链

wmic.exe(C:\Windows\System32\wbem\wmic.exe)
├─ wmic.dll(WMIC自身逻辑)
├─ wbemcli.dll 【核心COM客户端库,IWbemLocator】
├─ wbemprox.dll WMI代理COM组件
├─ combase.dll / ole32.dll COM子系统
├─ rpcss.dll RPC(DCOM通信依赖)
└─ winmgmt.exe(WMI服务,必选强依赖)
   ├─ WMI Repository(%windir%\System32\wbem\Repository,ESENT数据库)
   ├─ 各类Provider DLL:cimwin32.dll、secprov.dll、msiprov.dll等,真正采集硬件/系统信息
   └─ esent.dll WMI元数据数据库引擎

卸载 WMIC(Remove-Capability)只删除 wmic.exe、wmic.dll;winmgmt、wbemcli、所有 provider 全部保留,PowerShell CIM/Get-WmiObject 不受任何影响。

IIS-WMICompatibility(服务器端那个 Feature,重点区分)

  • 功能:注册 root\MicrosoftIISv2 IIS6 遗留 WMI 命名空间,提供 wmiis.dll
  • 用途:给老旧 IIS6 脚本读取 IIS 站点 / 应用池信息和 wmic.exe 无关
  • 依赖:IIS WebMetabase 组件,属于 IIS6 管理兼容套件;不是 WMIC 命令行工具

你之前的混淆点: ✅ Win10/Win11:WMIC 是 Capability(按需能力包)WMIC~~~~ ✅ Windows Server2022/2025:WMIC 仍然是 WMIC~~~~ 这个 CapabilityIIS-WMICompatibility是另外一个 IIS 相关 Feature,不是 WMIC。网上很多错误博客把两者混为一谈。

三、配套链(两套管理栈对比)

遗留配套链:WMIC + WMI (DCOM)

  • 调用入口:CMD /batch 脚本调用 wmic.exe
  • 本地通信:COM
  • 远程通信:DCOM(135 端口 + 动态端口,防火墙难配置)
  • 输出:纯文本,必须靠 findstr/for 循环解析文本
  • 适用:老式批处理运维脚本;不支持 PowerShell Core 跨平台
  • 扩展边界:只能 WQL 查询;没有内置循环、异常捕获、对象操作

现代配套链:PowerShell CIM(推荐替代栈)

powershell.exe / pwsh.exe
├─ CimCmdlets 内置模块:Get-CimInstance / Invoke-CimMethod
├─ Microsoft.Management.Infrastructure.dll(MMI,CIM托管核心库)
├─ System.Management.Automation.dll
├─ 底层同样复用 winmgmt.exe + WMI Provider(和WMIC共用同一套数据源)
└─ 远程:winrm服务(WS-Man,固定5985 HTTP /5986 HTTPS)
  • 输出:原生 PS 对象,管道传递属性,直接导出 JSON/CSV
  • 远程:WS-Man 标准化协议,防火墙更友好;跨平台 PowerShell7 Linux/macOS 也支持 CIM 客户端访问 Windows WMI

四、逻辑链路(本地查询示例)

WMIC: wmic cpu get name

  1. wmic.exe 启动 → 加载 wbemcli.dll
  2. COM 连接 winmgmt.exe
  3. winmgmt 加载 cimwin32.dll(Win32 provider)
  4. cimwin32.dll 读取内核 / 注册表获取 CPU 信息
  5. WMI 引擎返回 WMI 对象
  6. WMIC 把对象序列化为文本表格输出

PowerShell CIM 等价: Get-CimInstance Win32_Processor | Select Name

  1. PowerShell 加载 MMI 库、CimCmdlets
  2. MMI 调用 WMI COM 接口(本地)或 WS-Man(远程)
  3. 后面 3~5 步和 WMIC 完全一样,共用同一套 WMI 底层
  4. 返回 .NET 对象,不是文本;你可以直接访问对象属性

关键点:两者底层数据源完全同源,差异只在上层客户端和输出模型

五、边界(适用边界、限制边界)

WMIC 边界

✅ 边界内:老批处理快速查询硬件 / OS / 进程 / 服务;兼容 XP~Win11 旧脚本 ❌ 边界外:

  1. 2026 年 8 月之后新版 Win11 无法再安装 WMIC FoD 包
  2. 输出文本解析脆弱,字段一变脚本就崩
  3. DCOM 远程防火墙复杂,安全面大
  4. 不支持 PowerShell Core 跨平台
  5. 没有异常处理、对象模型,无法做复杂自动化

WMI/CIM 边界(WMIC 淘汰后仍然保留)

✅ 边界内:所有系统硬件、OS、服务、进程、注册表、事件等 WMI 类查询;本地 + 远程;PowerShell 全自动化;C#/C++ 编程调用 WMI COM/.NET API ❌ 边界外:WMI Provider 本身的缺陷(部分类性能差、部分硬件没有 WMI 提供程序);WMI 仓库损坏依然会报错(这是 winmgmt 服务本身问题,和 WMIC 无关)

六、你给出的 DISM 命令修正与解析

Windows 10 / Windows 11(桌面端,WMIC 是 Capability)

启用 WMIC(FoD 按需包)

DISM /Online /Add-Capability /CapabilityName:WMIC~~~~

卸载 WMIC

DISM /Online /Remove-Capability /CapabilityName:WMIC~~~~

Windows Server 2022 / 2025

⚠️ 重点:WMIC 仍然是 Capability WMIC~~~~;IIS-WMICompatibility 是 IIS 独立 Feature,不是 WMIC 启用 IIS6 WMI 兼容(root\MicrosoftIISv2,和 wmic.exe 无关)

DISM /Online /Enable-Feature /FeatureName:IIS-WMICompatibility /All

禁用 IIS6 WMI 兼容

DISM /Online /Disable-Feature /FeatureName:IIS-WMICompatibility /Remove

查询系统 Feature(服务器角色功能,IIS 相关在这里)

Dism /Online /Get-Features

查询 Capability(WMIC 在这里,桌面和服务器都适用)

Get-WindowsCapability -Online | Where Name -match WMIC

你贴出结果:IIS-WMICompatibility 状态 : 已禁用,这个不代表 WMIC 不可用;WMIC 状态要用Get-WindowsCapability单独查。

七、迁移映射示例(WMIC → CIM)

WMIC PowerShell CIM(推荐)  
wmic os get Caption,Version Get-CimInstance Win32_OperatingSystem Select Caption,Version
wmic cpu get name Get-CimInstance Win32_Processor Select Name
wmic process where name="notepad.exe" delete Invoke-CimMethod -ClassName Win32_Process -MethodName Terminate  

八、风险边界总结

  1. 只迁移脚本,WMI 底层不用改动;绝大多数场景直接替换成 CIM cmdlet 即可
  2. 不要继续依赖 WMIC 做长期自动化:2026 新版 Win11 彻底移除 FoD,无法再安装 wmic.exe
  3. IIS-WMICompatibility 仅在维护老旧 IIS6 脚本时启用,日常服务器建议保持禁用,减少攻击面(就是你现在看到的状态:已禁用)

一句话:WMIC~~~~ 是 wmic.exe 命令行程序本身(Capability,按需能力包);IIS-WMICompatibility 是 IIS6 遗留 WMI 命名空间组件(Feature,Windows 功能),二者完全独立,没有从属关系,Win10/11、Server2022/2025 都遵守这个规则。

1. WMIC~~~~(Capability)

  • 组件:wmic.exe + wmic.dll,WMIC 命令行客户端
  • 类型:Windows Capability(按需能力包,FoD)
  • 标识名:WMIC~~~~
  • 适用系统:Win10、Win11、Windows Server 2022、Windows Server 2025
  • 查询命令(PowerShell)
Get-WindowsCapability -Online | Where-Object Name -match WMIC
  • 安装 / 卸载(DISM)
:: 安装 WMIC
DISM /Online /Add-Capability /CapabilityName:WMIC~~~~

:: 卸载 WMIC
DISM /Online /Remove-Capability /CapabilityName:WMIC~~~~
  • 底层依赖:wbemcli.dllwinmgmt WMI 服务;和 IIS 无关
  • 作用:提供wmic.exe命令,用来在 CMD 里查询 / 调用 WMI
  • 弃用趋势:新版 Win11(24H2+)该 Capability 已移除,无法 Add-Capability 装回;Server 2022/2025 目前还保留该 Capability

2. IIS-WMICompatibility(Feature)

  • 组件:wmiis.dll,IIS6 兼容 WMI Provider
  • 类型:Windows Feature(系统角色功能)
  • 标识名:IIS-WMICompatibility
  • 适用系统:Windows Server 2022、Windows Server 2025(桌面 Win10/11 默认不带 IIS 这套 Feature)
  • 查询命令(DISM)
DISM /Online /Get-Features | findstr IIS-WMICompatibility
  • 启用 / 禁用(DISM)
:: 启用 IIS6 WMI兼容
DISM /Online /Enable-Feature /FeatureName:IIS-WMICompatibility /All

:: 禁用并移除 IIS6 WMI兼容
DISM /Online /Disable-Feature /FeatureName:IIS-WMICompatibility /Remove
  • 底层依赖:IIS Metabase、IIS 基础组件;和 wmic.exe 无关
  • 作用:注册 root\MicrosoftIISv2 这个老旧 IIS6 WMI 命名空间,只给读取 IIS 站点、应用池的老脚本使用
  • 边界:哪怕你没有安装 WMIC(WMIC~~~~ 未安装),只要开启了 IIS-WMICompatibility,WMI 命名空间root\MicrosoftIISv2依然存在;反过来,装了 WMIC,不装 IIS-WMICompatibility,也完全不影响wmic.exe查询操作系统、硬件、进程等常规 WMI 类。

3. 对比表

项目 WMIC~~~~(Capability) IIS-WMICompatibility(Feature)
对象 wmic.exe 命令行工具 IIS6 旧版 WMI 命名空间 Provider
分类 Capability(按需包) Feature(Windows 功能)
系统范围 Win10/11 + Server2022/2025 仅服务器系统(带 IIS 角色)
依赖 WMI 核心栈 winmgmt IIS Metabase 组件
查询方式 Get-WindowsCapability DISM /Get-Features
业务用途 CMD 调用 WMI 通用查询 老旧脚本读取 IIS6 配置
两者关系 互相独立,互不依赖 互相独立,互不依赖

4. 常见踩坑点

  1. ❌ 错误:Server 里开启 IIS-WMICompatibility = 开启 WMIC ✅ 正确:两个东西独立开关;开启 IIS-WMICompat,系统里依然没有 wmic.exe,必须单独 Add-Capability 安装 WMIC~~~~。
  2. ❌ 错误:桌面 Win10/11 有 IIS-WMICompatibility ✅ 正确:桌面版 Windows 的 IIS 组件里不带 IIS-WMICompatibility 这个 Feature,该 Feature 仅存在于 Server 系统。
  3. ❌ 错误:WMIC 弃用 = WMI 底层 / IIS-WMICompatibility 一起弃用 ✅ 正确:仅废弃 wmic.exe 客户端;winmgmt 服务、WMI Provider、IIS-WMICompatibility(如需维护老 IIS 脚本仍可启用)底层组件继续保留。

5. Mermaid 逻辑关系图

flowchart LR
    subgraph Windows系统
        A[Capability:WMIC~~~~] -->|包含| A1[wmic.exe wmic.dll]
        A1 -->|调用| W[winmgmt WMI服务]
        
        B[Feature:IIS-WMICompatibility] -->|包含| B1[wmiis.dll]
        B1 -->|注册命名空间| W
        
        W --> C[各类WMI Provider]
    end
    A -.独立.-> B

Windows Capability(FoD,Features on Demand|按需能力包)

一句话定义:FoD 是 Windows 的可选组件包模型,组件名称格式形如 Name~~~~版本,由 CBS(基于组件的服务栈)管理;默认不内置在系统镜像,需要按需拉取 / 离线加载,WMIC~~~~ 就是典型 FoDMicrosoft ... 核心区分:Capability(FoD) ≠ Windows Feature(传统 Windows 功能 / 角色)

一、底层原理

FoD 是微软在 Win10 引入的按需组件交付模型,目标:精简默认系统镜像体积,减少基线镜像大小、减少月度更新包体积,需要时再安装。

  1. 系统本地只保留 FOD 元数据清单C:\Windows\servicing\FodMetadata),记录所有可用 Capability 名称、版本、依赖、支持架构 / SKU;不包含组件二进制文件博客园
  2. 执行 Add-Capability 时,CBS/TrustedInstaller 按源优先级尝试获取 .cab 包:
    • 优先级 1:离线本地源(FoD ISO / 自定义本地仓库)
    • 优先级 2:Windows Update / WSUS
  3. 获取 cab 包后,TrustedInstaller 校验签名、依赖关系,把文件部署到系统目录、写入 WinSxS,注册组件
  4. Remove-Capability:删除二进制文件,保留元数据清单(以后还能重新安装,除非新版系统直接移除该 Capability 元数据,例如新版 Win11 删除 WMIC~~~~)

底层依赖栈

DISM / PowerShell(Dism模块)
        ↓
CBS(Component-Based Servicing)
        ↓
TrustedInstaller 服务(真正执行文件写入、组件注册)
        ↓
FOD元数据 + CAB组件包

二、命名格式(标志性 ~~~~ 分隔符)

格式:组件名~~~~版本 示例:

  • WMIC~~~~
  • OpenSSH.Server~~~~0.0.1.0
  • App.StepsRecorder~~~~0.0.1.0
  • Language.Basic~~~~zh-CN~0.0.1.0

~~~~ 是 Capability 的标识分隔符,传统 Windows Feature(如 IIS-WMICompatibility)没有这种命名格式

三、Capability(FoD) vs Windows Feature(传统系统功能)

项目 Capability(FoD 按需能力包) Windows Feature(传统系统功能)
标识样式 XXXX~~~~版本,带波浪号 普通名称 IIS-WMICompatibility,无波浪号
管理入口 DISM /Add-Capability / Get-WindowsCapability PowerShell cmdlet DISM /Enable-Feature / Get-WindowsFeature
存储基线 系统镜像不带二进制文件,仅元数据;按需下载 cab 镜像内置所有文件,只是默认禁用,开启不需要下载包
适用场景 轻量工具、语言包、小工具:WMIC、OpenSSH、截图工具、手写识别 系统角色、大型组件:IIS、.NET3.5、Hyper-V、IIS-WMICompatibility
卸载效果 Remove 后,二进制文件被删除;元数据还在(只要系统版本没移除该 Capability) Disable 只是关闭注册项,文件仍然保留在 WinSxS,不删除
适用系统 Win10/11 + Server2022/2025 主要 Windows Server,桌面 Win10/11 少量 Feature(如.NET3.5)

重点:WMIC 属于 Capability (FoD);IIS-WMICompatibility 属于传统 Windows Feature,二者两套管理体系

四、常用操作命令(WMIC 示例)

PowerShell(推荐)

# 查询本地所有Capability,过滤WMIC
Get-WindowsCapability -Online | Where-Object Name -match WMIC

# 安装WMIC
Add-WindowsCapability -Online -Name WMIC~~~~

# 卸载WMIC
Remove-WindowsCapability -Online -Name WMIC~~~~

DISM CMD

:: 安装
DISM /Online /Add-Capability /CapabilityName:WMIC~~~~

:: 卸载
DISM /Online /Remove-Capability /CapabilityName:WMIC~~~~

五、源优先级 & 离线部署边界

  1. 在线环境:默认优先 Windows Update;内网 WSUS 环境会走 WSUS
  2. 离线内网(不能联网):必须挂载对应版本的【语言和可选功能 ISO】,用 /source 参数指定本地 FoD 仓库,否则安装报错找不到源
DISM /Online /Add-Capability /CapabilityName:WMIC~~~~ /Source:D:\sources\SxS /LimitAccess

/LimitAccess:禁止访问 Windows Update,强制只用本地源

六、典型 FoD 清单参考

  • WMIC~~~~:WMIC 命令行工具
  • OpenSSH.Client~~~~:SSH 客户端
  • OpenSSH.Server~~~~:SSH 服务端
  • App.StepsRecorder~~~~:步骤记录器
  • Language.*:各类语言基础包、OCR、语音识别包

七、FoD 边界 & 踩坑点

  1. 新版系统会直接移除 Capability 元数据:Win11 24H2 之后,系统 FodMetadata 里已经删掉WMIC~~~~,就算离线 FoD ISO 也无法安装,这就是 WMIC 彻底淘汰的节点。

    传统 Feature 不会这样:IIS-WMICompatibility 只要有 IIS 角色,Feature 元数据一直存在,可以随时启用 / 禁用。

  2. 精简镜像风险:很多精简版 Windows 直接删除FodMetadata目录,所有 FoD 全部无法安装。
  3. FoD 是组件包,不是服务开关:Remove-Capability 会物理删除 wmic.exe/wmic.dll;传统 Feature Disable 只是关闭,文件不动。
  4. FoD 和 Feature 可以互相配合,但没有从属关系:例如服务器上可以同时:
    • 安装 FoD WMIC~~~~(获得 wmic.exe)
    • 启用 Feature IIS-WMICompatibility(获得 root\MicrosoftIISv2 WMI 命名空间) 两者独立,互不依赖。

八、Mermaid 架构链路

flowchart LR
    subgraph Windows CBS系统栈
        A[管理员:DISM / Add-WindowsCapability] --> B[TrustedInstaller]
        B --> C{FodMetadata元数据清单}
        C -->|查找WMIC~~~~| D[获取WMIC.CAB包<br/>源:WU/WSUS/离线FoD ISO]
        D --> E[解压部署 wmic.exe,wmic.dll 到系统目录 + WinSxS]
        E --> F[Capability状态:Installed]
    end
    F --> G[wmic.exe 调用 wbemcli.dll → winmgmt WMI服务]

 


WMIC 被弃用主要是因为 PowerShell 提供了更强大的功能、更好的用户体验、更好的性能以及更广泛的跨平台支持。微软推荐 IT 管理员和开发者转向 PowerShell,以适应现代化的管理和自动化需求。


Windows 10,11 启用WMIC命令
DISM /Online /Add-Capability /CapabilityName:WMIC~~~~
Windows server 2022,2025 启用WMIC命令
DISM /Online /Enable-Feature /FeatureName:IIS-WMICompatibility /Al

Windows 10,11 禁用卸载WMIC命令
DISM /Online /Remove-Capability /CapabilityName:WMIC~~~
Windows server 2022,2025 禁用卸载WMIC命令
DISM /Online /Disable-Feature /FeatureName:IIS-WMICompatibility /Remove


windows server 2022 2025 

查询命令:Dism /Online /Get-Features

部署映像服务和管理工具
版本: 10.0.26100.1150

映像版本: 10.0.26100.3194

程序包功能列表 : Microsoft-Windows-Foundation-Package~31bf3856ad364e35~amd64~~10.0.26100.1

功能名称 : IIS-WMICompatibility
状态 : 已禁用


命令行启用WMIC功能
1、以管理身份打开CMD或powershell命令执行窗口,输入如下命令进行添加wmic操作:

PS C:\Users\Administrator> DISM /Online /Get-FeatureInfo /FeatureName:IIS-WMICompatibility

部署映像服务和管理工具
版本: 10.0.26100.1150

映像版本: 10.0.26100.3194

功能信息:

功能名称 : IIS-WMICompatibility
显示名称 : IIS 6 WMI 兼容性
描述 : 安装 IIS 6.0 WMI 脚本接口
需要重新启动 : Possible
状态 : 已禁用

自定义属性:

ServerComponent\Description : IIS 6 WMI 兼容性提供 Windows Management Instrumentation (WMI)脚本接口,以便从您在 WMI 提供程序中创建的脚本集以编程方式管理和自动执行 IIS 10.0 Web 服务器的任务。此服务包括用于管理站点的 WMI CIM Studio、WMI 事件 注册、WMI 事件查看器和 WMI 对象浏览器工具。
ServerComponent\DisplayName : IIS 6 WMI 兼容性
ServerComponent\Id : 180
ServerComponent\Parent : Web-Mgmt-Compat
ServerComponent\Type : RoleService
ServerComponent\UniqueName : Web-WMI
ServerComponent\NonAncestorDependencies\ServerComponent\UniqueName : Web-Metabase
ServerComponent\Deploys\Update\Name : IIS-WMICompatibility

操作成功完成。
PS C:\Users\Administrator> DISM /Online /Enable-Feature /FeatureName:IIS-WMICompatibility /All

部署映像服务和管理工具
版本: 10.0.26100.1150

映像版本: 10.0.26100.3194

启用一个或多个功能
[==========================100.0%==========================]
操作成功完成。
PS C:\Users\Administrator>

如果使用后需要禁用或卸载,可以执行如下命令:

 DISM /Online /Disable-Feature /FeatureName:IIS-WMICompatibility /Remove


Windows 10,11,

命令行启用WMIC功能
1、以管理身份打开CMD或powershell命令执行窗口,输入如下命令进行添加wmic操作:

DISM /Online /Add-Capability /CapabilityName:WMIC~~~~
2、添加完成后,重新执行wmic命令后正常无报错。

如果使用后需要卸载,可以执行如下命令:

DISM /Online /Remove-Capability /CapabilityName:WMIC~~~


WMIC 组件深度解构(Win10/11 Capability vs Windows Server IIS‑WMICompatibility)

分析框架:底层原理|依赖文件|依赖关系|逻辑链路|配套链|边界|自动化 关键区分:

  • 桌面端 Win10/Win11WMIC 属于 Windows 可选能力 (Capability),CapabilityName: WMIC~~~~
  • Windows Server 2022/2025IIS‑WMICompatibility(IIS 6 WMI兼容性),属于服务器角色功能 (Feature),二者不是同一个组件,经常混淆。

⚠️重要澄清:

  1. WMIC.exeWMI 命令行客户端工具
  2. IIS‑WMICompatibility = IIS6 WMI 脚本提供程序,只用于 IIS 管理,≠ wmic.exe 命令本体; 很多运维文档错误把两者混为一谈。

一、底层原理

1)桌面 Windows10 / Windows11:WMIC 可选能力 Capability

WMIC = WMI Command‑line,WMI 的旧版命令行交互工具。 从 Windows 10 21H2 开始,WMIC 从系统默认安装移除,转为按需可选能力(Windows Capability)

  • 底层:wmic.exe 是封装 WMI COM 接口 (winmgmt.dll) 的命令行外壳,本身不实现 WMI 服务,只是客户端。
  • Capability 机制:按需下载 / 安装小包,存储在系统包库;不需要完整角色,桌面系统无 IIS 依赖。
  • 注册表:能力状态记录在 HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Capabilities

2)Windows Server 2022 / 2025:IIS‑WMICompatibility

IIS‑WMICompatibility(IIS6 WMI 兼容性组件)

  • 作用范围:专门给 IIS Web 服务器提供 IIS6 兼容的 WMI 管理提供程序,用于脚本读写 IIS 站点、应用池配置。
  • 该功能不安装 wmic.exe! wmic.exe 在 Server 系统依然需要单独 Capability 安装。
  • 依赖 IIS 元数据库兼容层 Web‑Metabase;是 IIS 管理角色子服务。

常见误区:开启IIS‑WMICompatibility,在 Server 里直接敲wmic依旧提示命令不存在;必须额外安装 WMIC 能力包。

核心对照表

表格

项目 Win10/Win11 WMIC Capability Server IIS‑WMICompatibility
组件对象 wmic.exe WMI 通用命令行客户端 IIS 6 兼容 WMI 提供程序(仅管理 IIS)
类型 Windows Capability 可选能力 Server Role Feature 角色功能
标识名 WMIC~~~~ IIS‑WMICompatibility
是否依赖 IIS ❌不依赖 IIS ✅强依赖 IIS Web‑Metabase 组件
安装后产出 %SystemRoot%\System32\wbem\wmic.exe 注册 IIS 专属 WMI 命名空间 root\MicrosoftIISv2

二、依赖文件

① Win10/11 WMIC Capability(wmic.exe)

表格

文件路径 作用
C:\Windows\System32\wbem\wmic.exe 主可执行程序
C:\Windows\System32\wbem\wmic.dll WMIC 内部逻辑库
winmgmt.dll WMI COM 接口;WMI 服务winmgmt(winmgmt.exe)
wbemprox.dll WMI COM 代理

底层完全依赖系统 WMI 服务(Winmgmt);WMI 服务本身是操作系统内置,不会随 WMIC 卸载而删除,卸载只是删除 wmic.exe 外壳程序

② Server IIS‑WMICompatibility (IIS6 WMI 兼容)

表格

文件路径 作用
wmiis.dll IIS6 WMI 提供程序 DLL,注册到 WMI
metabase.dll IIS 旧元数据库兼容层(依赖 Web‑Metabase)
winmgmt.exe WMI Windows 管理规范服务

三、依赖关系|调用链路

1)Win10/11 安装 WMIC Capability

DISM /Online /Add‑Capability /CapabilityName:WMIC~~~~
        ↓
Dism 访问 CBS(基于组件的服务),查询本地包存储 / Windows Update获取WMIC能力包
        ↓
CBS 将 wmic.exe、wmic.dll释放到 %windir%\System32\wbem
        ↓
更新Capabilities注册表记录为已安装
        ↓
✅无需重启;直接执行 wmic 即可;底层调用系统常驻WMI服务winmgmt

卸载链路:

DISM /Online /Remove‑Capability /CapabilityName:WMIC~~~~
        ↓
CBS移除wmic.exe/wmic.dll;标记Capability已卸载
        ↓
输入wmic → “不是内部或外部命令”
        ↓
⚠️WMI服务winmgmt 继续保留运行,不受影响

2)Windows Server 2022‑2025 启用 IIS‑WMICompatibility

DISM /Online /Enable‑Feature /FeatureName:IIS‑WMICompatibility /All
        ↓
/All 参数自动安装前置依赖:Web‑Metabase(IIS元数据库兼容层)
        ↓
注册 wmiis.dll WMI提供程序,注册root\MicrosoftIISv2 WMI命名空间
        ↓
提示:NeedRestart=Possible;多数场景无需重启,部分环境要求重启WMI服务
        ↓
脚本可通过WMI操作IIS;⚠️**wmic.exe命令仍然缺失,需要单独安装WMIC Capability**

禁用卸载:DISM /Online /Disable‑Feature /FeatureName:IIS‑WMICompatibility /Remove /Remove:移除有效载荷;不只是标记禁用。

权限约束

  1. DISM 操作 Capability / Feature 必须管理员权限;普通用户执行报错。
  2. WMIC 只是客户端;WMI 远程查询还受 DCOM、WMI 防火墙、CIM 安全权限控制。
  3. IIS‑WMICompatibility 必须IIS 角色已经部分安装;裸 Server 直接启用会失败,因为缺少父组件 Web‑Mgmt‑Compat。

四、逻辑链路 & 边界(高频踩坑)

✅正确认知

  1. WMIC(wmic.exe)已经被微软弃用;推荐迁移至 Get‑WmiObject / Get‑CimInstance PowerShell Cmdlet
  2. Win10/11 默认不带 wmic.exe,必须 Add‑Capability;WMI 服务本体一直存在。
  3. Server:IIS‑WMICompatibility ≠ wmic.exe。很多运维踩坑:装了 IIS‑WMICompatibility,执行 wmic 依旧提示命令不存在,要额外安装WMIC~~~~能力。

❌边界风险汇总

表格

边界项 现象说明
组件混淆 开启 IIS‑WMICompatibility,并不能得到 wmic.exe 命令;两者完全独立
离线镜像 离线环境 Add‑Capability 需要本地源;无 Internet 会下载失败,必须提供 Windows ISO 能力源
弃用状态 WMIC 为弃用组件,微软不再修复漏洞;新项目优先 CIM (PowerShell)
依赖隔离 卸载 WMIC Capability,不会停止、删除系统 WMI 服务 winmgmt,PowerShell Get‑CimInstance 不受任何影响
IIS 依赖边界 IIS‑WMICompatibility 必须依赖 Web‑Metabase;裸 Server 无 IIS 时,不加/All参数会启用失败
重启标记 Possible 代表 “可能需要重启”;大部分场景无需重启,少数服务器环境需要重启 WMI 服务或者整机
命名空间隔离 IIS‑WMICompatibility 只新增root\MicrosoftIISv2;普通 WMI 命名空间 root\cimv2 属于系统自带,不受此 Feature 控制

五、配套链

  1. dism.exe:主部署工具,操作 Capability / Windows Feature;
  2. CBS (Component Based Servicing):组件服务,负责 Capability 安装卸载;
  3. WMI 服务 winmgmt:Windows Management Instrumentation,WMIC、CIM 底层公共依赖;
  4. 组策略:可以阻止安装可选 Windows Capability,会拦截 WMIC 安装;
  5. 离线介质:企业离线环境,需要/Source参数指向本地 ISO 的\sources\sxs源;
  6. PowerShell 替代命令:
    • Get‑CimInstance(推荐现代)
    • Get‑WmiObject(已弃用)

六、自动化流水线脚本

1)Windows10 / Windows11 自动化(管理员 PowerShell)

# 查询WMIC Capability状态
DISM /Online /Get‑CapabilityInfo /CapabilityName:WMIC~~~~

# 安装 WMIC
DISM /Online /Add‑Capability /CapabilityName:WMIC~~~~

# 卸载 WMIC
# DISM /Online /Remove‑Capability /CapabilityName:WMIC~~~~

离线环境需要追加源参数示例: DISM /Online /Add‑Capability /CapabilityName:WMIC~~~~ /Source:D:\sources\sxs /LimitAccess

2)Windows Server 2022 / 2025

# 查询 IIS 6 WMI兼容组件状态
DISM /Online /Get‑FeatureInfo /FeatureName:IIS‑WMICompatibility

# 启用IIS‑WMICompatibility,自动拉取依赖Web‑Metabase
DISM /Online /Enable‑Feature /FeatureName:IIS‑WMICompatibility /All

# 【注意:Server想要wmic.exe,还需要额外安装WMIC能力!】
DISM /Online /Add‑Capability /CapabilityName:WMIC~~~~

# 卸载IIS‑WMICompatibility,移除负载
# DISM /Online /Disable‑Feature /FeatureName:IIS‑WMICompatibility /Remove

3)PowerShell 检测脚本(跨桌面 + 服务器,判断 wmic.exe 是否可用)

# 检测wmic.exe是否存在
if(Test‑Path "$env:SystemRoot\System32\wbem\wmic.exe"){
    Write‑Host "WMIC 已安装"
}else{
    Write‑Host "WMIC 未安装"
}

4)Unattend.xml 应答文件示例

Win10/11 离线部署添加 WMIC Capability

<settings pass="oobeSystem">
  <component name="Microsoft‑Windows‑WindowsFoundation">
    <Capabilities>
      <Capability Name="WMIC~~~~"/>
    </Capabilities>
  </component>
</settings>

Server 启用 IIS‑WMICompatibility

<settings pass="specialize">
  <component name="Microsoft‑Windows‑Server‑Roles">
    <RoleServcies>
      <RoleService Name="IIS‑WMICompatibility" State="Enabled"/>
    </RoleServcies>
  </component>
</settings>

补充运维提示

  1. 安全视角:WMIC 是历史攻击面,生产服务器如无业务脚本依赖,建议卸载移除 WMIC 能力;优先迁移 CIM (PowerShell)。
  2. IIS‑WMICompatibility 仅用于老旧 IIS6 时代遗留脚本;新 IIS 管理推荐使用 IISAdministration PowerShell 模块。

 

posted @ 2025-03-02 13:11  suv789  阅读(3392)  评论(0)    收藏  举报