wmic 现状与迁移
wmic 是 WMI 的命令行封装,早年用来查进程、服务、系统信息,网上大量老工单和老脚本都基于它。微软已经把它标记为弃用,新系统上可能默认不再安装,官方建议改用 Get-CimInstance、Get-Process 这类 PowerShell 写法。所以现在的正确姿势是:看得懂老命令,但新脚本一律写新语法。
基本信息
| 适用平台 | 旧版 Windows 自带,新系统需安装可选功能 |
|---|---|
| 典型语法 | wmic process where "name='x.exe'" get ProcessId,CommandLine |
| 现代等价 | Get-CimInstance Win32_Process / Get-Process |
| 输出特点 | 本地化文本表格,随系统语言变化 |
| 状态 | 已弃用(deprecated) |
典型使用场景
- 阅读历史脚本与老工单时,快速看懂 wmic 在做什么
- 把存量 wmic 语句逐条翻译成 CIM 写法
- 在老系统上临时查进程命令行、服务启动模式、系统版本
- 排查「脚本在旧机器正常、新机器报找不到命令」的原因
- 做知识交接时对比两种 WMI 访问方式的差异
- 给老脚本做兼容改造前的摸底,确认到底用了哪些类
- 在只有 cmd 的受限环境里手动取一条系统信息,不必先开 PowerShell
- 对照老资料排查问题,先把命令看懂再决定要不要重写
老写法与新写法
老写法与新写法
wmic process where "name='explorer.exe'" get ProcessId,CommandLine
wmic service where "name='Spooler'" get Name,State,StartMode
wmic os get Caption,Version,LastBootUpTime
REM 等价的现代写法:
Get-CimInstance Win32_Process -Filter "name='explorer.exe'" | Select-Object ProcessId, CommandLine
Get-CimInstance Win32_Service -Filter "name='Spooler'" | Select-Object Name, State, StartMode
Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version, LastBootUpTime对应关系
| 老写法 | 新写法 | 查询对象 |
|---|---|---|
| wmic process | Get-CimInstance Win32_Process | 进程信息 |
| wmic service | Get-CimInstance Win32_Service | 服务状态与启动模式 |
| wmic os | Get-CimInstance Win32_OperatingSystem | 系统版本与启动时间 |
| wmic /node: | Invoke-Command -ComputerName | 远程查询 |
wmic 的输出是本地化文本,中英文系统上列名与格式都不一样,用文本解析很容易出错;改用 CIM 对象后直接按属性取值,稳定得多。
新系统上找不到 wmic 并不说明 WMI 坏了:被移除的只是这个命令行程序,WMI 服务本身仍在,Get-CimInstance 照常可用。写新脚本时优先用 CIM 对象,不仅能取属性,还能直接管道到 Select-Object 与 Where-Object 做筛选。