wmic 是什么
wmic 是 WMI 的命令行外壳,用类似 SQL 的简单语法(别名 + get + where)一次取出硬件、系统、进程、服务的结构化信息,直接可读、可直接塞进批处理做判断。它最大的特点是不用装任何东西就能拿到「进程的完整命令行」「磁盘剩余空间」这类关键字段。微软已把 WMIC 标记为弃用并逐步转为可选功能,新系统上可能默认不可用,新建脚本应当用 PowerShell 的 Get-CimInstance 系列替代,存量脚本则要评估迁移。
基本信息
| 适用平台 | Windows(7 到 11、Server),版本越新越可能默认未安装 |
|---|---|
| 语法 | wmic 别名 get 属性 [where "条件"] [/format:csv|table|list] [/value] |
| 常用别名 | os、cpu、computersystem、bios、logicaldisk、diskdrive、process、service、product、nic、share、useraccount、qfe |
| 远程查询 | /node:主机 /user:账户 /password:口令 前缀开关 |
| 注意事项 | 命令行里带 /password 会留在命令历史与进程列表里,尽量避免 |
| 状态 | 已弃用,建议迁移到 CIM cmdlet |
典型使用场景
- 资产盘点:一次性导出主机型号、CPU、内存、系统版本与序列号
- 磁盘预警:读取各逻辑盘容量与剩余空间,写进巡检脚本
- 进程排查:查进程的完整命令行,确认是谁在用某个端口或参数
- 服务核查:按名称或状态筛选服务,批量核对是否按预期运行
- 热补丁核对:用 qfe 别名列出已安装补丁,比对基线
常用示例
常用示例
wmic os get caption,version,buildnumber # 系统名称、版本与构建号
wmic computersystem get model,manufacturer # 主机型号与厂商
wmic cpu get name,numberofcores # CPU 型号与核心数
wmic logicaldisk get caption,size,freespace # 各盘容量与剩余空间
wmic process where "name='java.exe'" get processid,commandline # 进程完整命令行
wmic service where "name like 'MySQL%%'" get name,state,startmode # 服务状态
wmic qfe get hotfixid,installedon # 已安装补丁列表
wmic product get name,version # 已安装程序(较慢,可用 table 输出)
wmic /format:csv os get caption,version # 结构化输出便于落盘
wmic process where "processid=1234" delete # 结束指定进程(危险,先确认 PID)别名与替代命令对照
| 别名 | 取什么 | PowerShell 替代 |
|---|---|---|
| os | 操作系统名称、版本、构建号 | Get-CimInstance Win32_OperatingSystem |
| logicaldisk | 逻辑盘容量与剩余空间 | Get-CimInstance Win32_LogicalDisk 或 Get-Volume |
| process | 进程 PID、命令行、内存 | Get-CimInstance Win32_Process / Get-Process |
| service | 服务名称、状态、启动方式 | Get-CimInstance Win32_Service / Get-Service |
| product | 已安装软件清单 | Get-CimInstance Win32_Product(同样较慢) |
WMIC 的参数细节与原版有差异:where 条件里字符串用单引号包住,整体再用双引号;百分号在批处理中要写成 %% 转义。查询语句写错通常不报语法错,而是给出空结果,先在命令行单独验证再固化到脚本。
别名是常用 WMI 类的简写,例如 process 等价于 Win32_Process。别名覆盖不到的类要走完整路径:wmic path Win32_StartupCommand get name,command。
迁移到 CIM 的等价写法
迁移到 CIM 的等价写法
Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version, BuildNumber
Get-CimInstance Win32_Process -Filter "Name='java.exe'" | Select-Object ProcessId, CommandLine
Get-CimInstance Win32_Service -Filter "Name LIKE 'MySQL%'" | Select-Object Name, State, StartMode
Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object DeviceID, Size, FreeSpacewmic process ... delete、wmic product ... call uninstall 这类调用会真的执行操作且没有确认提示。用 PID 时需要先核对进程命令行,避免误杀同名进程或用错 PID。