WMIC 一直是系统管理员的得力助手,它通过「命令提示符」提供了一种高效、精准的方式来管理 Windows 系统。管理员可以利用 WMIC 进行系统配置、查询和监控等操作。
微软已宣布将在未来的 Windows 版本中逐步淘汰 WMIC:
- Windows 10 21H1: WMIC 的用户界面(UI)已不推荐使用。
- Windows 11 23H2 和 22H2: WMIC 作为一个「可选功能」提供,但仍默认安装。
- Windows 11 24H2: WMIC 将完全移除。
此外,从 2024 年 1 月 29 日起,WMIC 在 Windows 预览版中,仅作为一个可选功能提供,已经不再默认安装。
那么,对于依赖 WMIC 开展工作的用户该怎么办呢?微软推荐使用 Windows PowerShell 替代 WMIC。
PowerShell 是一种基于 .NET Framework 的命令行解释器和脚本环境,具有更强大的功能和更灵活的语法。
接下来,让我们先回顾一下 WMIC 的主要功能,再介绍如何使用 PowerShell 来平替这些功能。
WMIC 是什么
WMIC 全称 Windows Management Instrumentation Command-line,是一个命令行工具。它提供了访问 Windows Management Instrumentation(WMI)的通道。WMI 是 Windows 中一个强大的管理框架,用于数据管理和操作。
通过 WMIC,管理员可以轻松执行各种 Windows 管理任务。利用 WMI 脚本和应用程序,再结合 WinRM(Windows 远程管理)和 SCCM(System Center Configuration Manager),可以在远程计算机上自动化执行管理任务。
WMIC 通过与 WMI 的紧密集成,允许用户查询和调整系统设置。例如,通过 WMIC 调整 Windows 屏幕亮度;要获取计算机的型号、名称、制造商和系统类型,可以使用以下 WMIC 命令:
wmic computersystem get manufacturer,model,name,systemtype
使用 WMIC 命令 获取计算机信息
这条命令能迅速提供关键系统信息,对系统管理员而言极其有用。
微软为什么决定淘汰 WMIC
WMIC 弃用时间表
既然 WMIC 这么好用,微软又为什么要将之弃用,转而推动 PowerShell 作为替代呢?这一决策主要基于以下几点原因:
- 技术发展:PowerShell 提供了一种更现代、更强大的方式来访问和管理 WMI,以及其他许多系统管理功能。它支持更复杂的脚本、更灵活的命令,以及更广泛的功能集,让它成为了执行系统管理任务的首选。
- 性能提升:相比 WMIC,PowerShell 在性能和效率上通常表现更优,尤其是在处理大批量数据或执行复杂管理任务时,PowerShell cmdlets 运行更高效。
- 安全性考量: WMIC 可能被恶意软件或攻击者利用来执行远程命令或部署恶意代码。而 PowerShell 则通过执行策略控制、更细致的权限管理等强大安全特性,来有效降低这类风险。
- 统一标准:集中使用 PowerShell 来管理系统任务,有助于实现工具集的统一和标准化,简化系统管理工作,提升效率,并减少管理员在不同工具间切换的需要。
- 社区支持:PowerShell 拥有一个活跃的社区,提供丰富的资源、脚本和模块。微软与社区的持续投入保障了 PowerShell 的不断更新和改进,而 WMIC 的发展则相对停滞。
虽然 WMIC 在过去是非常有用的管理工具,但随着技术的演进和新工具的出现,微软认为转向更现代、更安全、更强大的管理工具是必要的。
这反映了一个行业常态:随着技术的进步,旧工具会被更先进的新工具所取代,以满足现代 IT 环境的需求。
使用 PowerShell、WMI 和 CIM 替代 WMIC
在正式探讨替代方案之前,我们需要先厘清几个核心概念:
- Windows 系统内置了 WMI 和 CIM 的 cmdlets,为管理员提供了强大的管理工具。
- WMI(Windows 管理接口)基于 CIM(通用信息模型)标准,主要用于获取和展示计算机信息。CIM 是行业通用标准,虽然它本身不直接支持远程数据访问,但 WMI 利用了 DCOM(分布式组件对象模型)和 RPC(远程过程调用)等技术,实现了在网络连接的远程系统上使用 CIM。不过,WMI 在通过防火墙进行远程设备查询时存在一定局限性。
- PowerShell 中的 WMI 和 CIM cmdlets 是向着更安全、更高效、兼容性更强的管理工具转型的重要一步。接下来,我们将通过一些基本实例,帮助你完成这一转型过程。
CIM cmdlets 使用示例
CIM cmdlets 通过 WS-Management 协议实现数据交换,该协议比 DCOM 更适合远程管理,尤其是在需要穿透防火墙时。
- 获取系统信息
Get-CimInstance -ClassName CIM_ComputerSystem
该命令会显示当前计算机的系统信息,输出内容与 WMIC 命令相似。
使用 Get-CimInstance 获取系统信息
- 获取启动配置
Get-CimInstance -ClassName CIM_OperatingSystem
该命令提供了操作系统的详细信息,包括系统目录、构建号和版本信息等。
WMI cmdlets 使用示例
虽然比较推荐使用 CIM cmdlets,但 PowerShell 同样支持直接使用 WMI 的 cmdlets。例如:
- 获取进程列表
Get-WmiObject -Class Win32_Process
该命令会列出当前运行的所有进程。
使用 Get-WmiObject 查看进程列表
- 获取服务状态
Get-WmiObject -Class Win32_Service | Where-Object {$_.State -eq "Running"}
该命令会筛选出所有当前正在运行的服务。
使用 Get-WmiObject 查看运行的服务
WMIC 脚本向 PowerShell 转换
如果你之前主要使用 WMIC 进行管理任务,现在可以考虑将这些脚本转换为 PowerShell cmdlets。
PowerShell 提供了更多命令选项和更灵活的脚本功能,在多数情况下,这个转换过程直接且简单。
转换过程中,Get-Command
和Get-Help
cmdlets 能帮助你快速找到对应的 PowerShell 命令,及其使用方法。
例如,要查找所有与实例相关的可用 CIM 命令,可以使用:
Get-Command -Noun CimInstance*
使用 Get-Help
获取帮助
同时,Get-Help
命令能提供特定 cmdlet 的详细使用说明和示例,这对学习新命令非常有帮助:
Get-Help Get-CimInstance -Full
通过这种方式,你就可以逐步替换 WMIC 命令,从而提高系统管理的效率和安全性。
要深入了解 PowerShell 中的 WMI 和 CIM 命令使用方法,可以参考微软发布的这篇指南。
自 2016 年起,微软就已经开始逐步淘汰 WMIC。虽然没有宣布具体的弃用日期,但想必已经迫在眉睫。因此,建议系统管理员尽快开始探索迁移解决方案,把 PowerShell 的 WMI 和 CIM 工具融入日常管理工作和编程任务中。