
WMIC 曾经是系统管理员常用的命令行工具,可以通过「命令提示符」来查询和管理 Windows 系统。但从 2026 年 8 月起,Windows 11 24H2 和 25H2 已经不再内置 WMIC,也无法再通过「可选功能」或 DISM 重新添加。但被移除的只是wmic.exe命令行工具本身,底层的 WMI(Windows Management Instrumentation)仍在支持。
微软淘汰 WMIC 的过程主要分为以下几个阶段:
| Windows 版本 | WMIC 状态 |
|---|---|
| Windows 10 21H1 | WMIC 被标记为已弃用。 |
| Windows 11 22H2 和 23H2 | WMIC 改为「可选功能」,但仍默认预装。 |
| Windows 11 24H2 和 25H2 | 新安装已默认移除 WMIC;从 2026 年 8 月起,WMIC 不再随系统提供,也不再作为「可选功能」提供。 |

因此,依赖wmic.exe的批处理、登录脚本和运维自动化流程,都需要尽快迁移到 PowerShell。PowerShell 的 CIM cmdlets 可以直接访问 WMI,迁移也不代表要放弃已有的管理数据和 WMI 类。
PowerShell 是 Windows 的命令行解释器和脚本环境。Windows PowerShell 5.1 基于 .NET Framework;现代 PowerShell 则运行在 .NET 上,提供了更完整的对象管道、远程管理和脚本能力,是 WMIC 的官方替代方案。
WMIC 是什么
WMIC 全称 Windows Management Instrumentation Command-line,是访问 WMI 的命令行入口;WMI 则是 Windows 内置的管理框架,提供了系统数据查询和配置修改能力。
管理员通过 WMIC,可以执行各种系统管理任务,比如调整 Windows 屏幕亮度。搭配 WMI 脚本、WinRM(Windows 远程管理)和 SCCM(System Center Configuration Manager),还能批量自动化管理远程计算机。
比如,要获取计算机的制造商、型号、名称和系统类型,可以用这条 WMIC 命令:
wmic computersystem get manufacturer,model,name,systemtype

在仍保留 WMIC 的旧系统上,这条命令可以继续执行。但 Windows 11 24H2 和 25H2 已经无法再把 WMIC 作为「可选功能」重新装回,现有脚本需要改用 PowerShell 来实现同等功能。
为什么 Windows 11 移除 WMIC
- WMIC 早已被标记为弃用,PowerShell 也已经提供了访问 WMI 的现代接口。微软表示,此次移除 WMIC 只针对命令行工具,并不影响 WMI 基础设施本身。
- PowerShell 的 CIM cmdlets 支持对象管道和远程会话,脚本可以直接处理对象属性,不用再像 WMIC 那样解析纯文本输出。但具体性能取决于查询内容、目标机器数量和网络情况,不要简单以为迁移后的性能就一定提升。
- 安全层面,WMIC 常年被攻击者作为系统自带的横向移动工具来滥用。但移除这个旧入口不代表 PowerShell 脚本就天生安全,仍需要按现有的权限模型、执行策略和日志策略来进行管控。
- 统一使用 PowerShell 来处理系统管理任务,工具链会更加标准,管理员也不用在多个工具之间来回切换,运维效率更高。
另外,PowerShell 有活跃的社区和持续的官方投入,资源、脚本、模块都很丰富,功能一直在迭代;而 WMIC 的发展则相对停滞。
迁移到 PowerShell:先理清 WMI、CIM 和 CIM cmdlets
迁移到 PowerShell 之前,我们先把这 3 个核心概念理清楚:
- WMI 是 Windows 自带的管理基础设施;
- CIM 是通用信息模型标准;
- PowerShell 中的 CIM cmdlets 则是访问这些管理类的首选接口。
管理员运维常用的Win32_OperatingSystem、Win32_Service等 WMI 类,完全不受 WMIC 移除的影响,脚本里的查询条件、权限配置都不用改动。
从 PowerShell 3.0 开始就内置了 CIM cmdlets。Get-CimInstance已经取代旧的Get-WmiObject,新写的脚本应优先使用前者。
CIM cmdlets 使用示例
CIM cmdlets 通过 WS-Management 协议来传输数据,比旧的 DCOM 协议更适合远程管理,尤其是在需要穿透防火墙时。
- 获取系统信息:
Get-CimInstance -ClassName CIM_ComputerSystem
输出内容和前面那条 WMIC 命令基本对应。
如果要和前面 WMIC 命令输出的字段对齐,可以使用:
Get-CimInstance -ClassName CIM_ComputerSystem | Select-Object Manufacturer, Model, Name, SystemType
- 获取操作系统信息:
Get-CimInstance -ClassName CIM_OperatingSystem
能拿到系统目录、构建号、版本等详细的操作系统信息。

旧 Get-WmiObject 脚本应迁移到 CIM cmdlets
虽然Get-WmiObject在 Windows PowerShell 5.1 中仍可使用,但微软从 PowerShell 3.0 开始就已经用Get-CimInstance取代了它。在维护旧脚本时,可以暂时留着来兼容老环境,但新脚本建议直接使用 CIM cmdlets 就好。
- 获取进程列表可改为:
Get-CimInstance -ClassName Win32_Process

- 筛选正在运行的服务可改为:
Get-CimInstance -ClassName Win32_Service | Where-Object {$_.State -eq "Running"}

如果旧脚本需要在 Windows PowerShell 5.1 中短期维护,下面两条Get-WmiObject命令可以作为对照参考,但不应再作为迁移后的默认写法:
- 获取进程列表:
Get-WmiObject -Class Win32_Process
- 获取服务状态:
Get-WmiObject -Class Win32_Service | Where-Object {$_.State -eq "Running"}
WMIC 脚本向 PowerShell 转换
如果你的脚本里还有wmic调用,可以先按命令清单逐项替换,再在目标系统上测试输出格式、权限配置和远程连接方式。尤其是原来依赖 WMIC 文本列对齐、或使用for /f批处理解析结果的逻辑,在迁移到 PowerShell 后可以直接处理对象属性,不用再做文本解析。
多数情况下的转换过程会很直接,PowerShell 本身也提供了更丰富的命令选项和脚本能力。转换时可以使用Get-Command和Get-Help来快速查找对应的命令和用法:
例如,要查找所有与实例相关的 CIM 命令,可以使用:
Get-Command -Noun CimInstance*

另外,要查看某个 cmdlet 的完整说明和示例,可以使用Get-Help,这对学习新命令很有帮助:
Get-Help Get-CimInstance -Full
通过这种方式,你就可以逐步替换 WMIC 命令,来提高系统管理的效率和安全性。
要深入了解 PowerShell 中的 CIM 和 WMI 命令用法,可以参考微软发布的官方指南。
Windows 11 24H2 和 25H2 现已正式移除 WMIC,并没有提供重装回来的「可选功能」入口。脚本迁移的核心是替换wmic.exe调用,优先使用Get-CimInstance和其他 CIM cmdlets,保留已有的 WMI 类、查询条件与权限边界。部署之前记得先在目标 Windows 版本上验证脚本的输出是否符合预期。













最新评论
有多亮,是blingbling的吗🤣
这个网站眼前一亮
不要装,千万不要装,无法自定义鼠标指针,主题和壁纸需要重新设置,但是鼠标指针完全被像素版大白指针替代,无法更改。
鼠标指针也没了qwq