当前位置: 首页 > news >正文

《Windows Internals》读书笔记 10.4.1:WMI 概述——Windows 管理基础设施的统一入口


🔥个人主页:杨利杰YJlio
❄️个人专栏:《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》
《微信助手》 《锤子助手》 《Python》 《Kali Linux》
《那些年未解决的Windows疑难杂症》
🌟让复杂的事情更简单,让重复的工作自动化


《Windows Internals》读书笔记 10.4.1:WMI 概述——Windows 管理基础设施的统一入口

  • 1. 什么是 WMI?为什么它值得单独学习?
  • 2. 一句话先理解:WMI 到底是什么?
  • 3. WMI 的核心组成:Namespace、Class、Instance、Property、Method、Provider
    • 3.1 Namespace(命名空间)
    • 3.2 Class(类)
    • 3.3 Instance(实例)
    • 3.4 Property(属性)
    • 3.5 Method(方法)
    • 3.6 Provider(提供程序)
  • 4. WMI 的工作流程:一次查询是怎么走通的?
    • 4.1 发起请求
    • 4.2 进入 WMI API / COM 接口
    • 4.3 WMI 服务(Winmgmt)接收请求
    • 4.4 解析命名空间与类
    • 4.5 调用 WMI Provider
    • 4.6 返回结果
  • 5. WMI 能做什么?为什么它在运维里特别重要?
    • 5.1 信息查询
    • 5.2 硬件清点
    • 5.3 服务与进程管理
    • 5.4 事件监控
    • 5.5 脚本自动化
  • 6. 从企业桌面运维视角理解 WMI
  • 7. 常见 WMI / CIM 查询示例
    • 7.1 查询操作系统信息
    • 7.2 查询 BIOS 信息
    • 7.3 查询计算机系统信息
    • 7.4 查询磁盘信息
    • 7.5 查询服务信息
    • 7.6 查询网卡配置
  • 8. WMI、WMIC、CIM、PowerShell 之间到底是什么关系?
    • 8.1 WMI 是底层管理体系
    • 8.2 WMIC 是旧的命令行工具
    • 8.3 Get-WmiObject 是旧 PowerShell 风格
    • 8.4 Get-CimInstance 是更推荐的新方式
    • 8.5 它们的关系可以这样记
  • 9. 学习 WMI 时要注意什么?
    • 9.1 权限问题
    • 9.2 类名和命名空间要搞清楚
    • 9.3 远程连接依赖环境
    • 9.4 性能开销
    • 9.5 不要把 WMI 当成“万能答案”
  • 10. 本节小结
  • 11. 写在最后

1. 什么是 WMI?为什么它值得单独学习?

在学习 Windows Internals 时,我们会频繁接触到一个非常重要的名字:WMI

WMI 的全称是:

Windows Management Instrumentation

它本质上是 Windows 提供的一套统一管理基础设施,用于完成以下事情:

  • 读取系统信息
  • 访问硬件与设备对象
  • 查询服务和进程状态
  • 监控系统事件
  • 配合脚本做自动化管理
  • 支持远程运维和集中化管理

很多人第一次接触 WMI 时,会误以为它只是一个“查信息的工具接口”。
但实际上,WMI 不是一个单点功能,而是一整套管理对象模型 + 数据访问框架 + 自动化运维基础能力。

换句话说:

WMI 不是一个具体的命令,而是 Windows 中统一访问和管理系统对象的一层管理接口。

这也是为什么很多企业级桌面支持、PowerShell 脚本、资产盘点工具、远程巡检方案,底层都离不开 WMI。


从这张图中我们可以先建立一个整体印象:

  • WMI 可以连接系统信息
  • 可以连接硬件设备
  • 可以连接服务与进程
  • 可以连接事件与告警
  • 还可以和PowerShell / VBScript / WMIC等工具协作

所以从定位上看,WMI 就像 Windows 的一个“统一管理入口层”。


2. 一句话先理解:WMI 到底是什么?

如果你想用最通俗的话来理解 WMI,我建议先记住下面这句话:

WMI 是 Windows 把系统中的各种可管理对象,统一抽象出来后,提供给管理员、脚本和运维工具使用的一套管理框架。

这里的“可管理对象”包括但不限于:

  • 操作系统版本
  • BIOS 信息
  • CPU / 内存 / 磁盘
  • 网卡与网络配置
  • 进程与服务
  • 事件日志
  • 用户与账户
  • 补丁与系统状态

也就是说,很多原本散落在不同组件中的信息,在 WMI 里都可以通过统一的方式来访问。

比如你想知道:

  • 当前系统版本是多少?
  • 机器序列号是什么?
  • 哪些服务正在运行?
  • 当前有哪些进程?
  • 网卡 IP 和 DNS 是什么?
  • 某个事件是否触发过?

这些都可以通过 WMI 去获取。


3. WMI 的核心组成:Namespace、Class、Instance、Property、Method、Provider

真正理解 WMI,关键不是死记命令,而是先把它的对象模型搞清楚。

很多人学 WMI 卡住,根因就在这里:

看到了命令,却没看懂底层对象关系。

WMI 的核心组成主要包括以下几个部分:

组件作用可以怎么理解
Namespace命名空间类似文件夹,用来组织 WMI 对象
Class对象模板,定义一类对象长什么样
Instance实例某个类在系统中的具体对象
Property属性描述对象的特征、状态、配置值
Method方法对象可以执行的操作
Provider提供程序负责把真实系统数据映射到 WMI

结合这张图,我来用更白话的方式解释一下:

3.1 Namespace(命名空间)

命名空间可以理解为:

WMI 世界里的“目录结构”或“逻辑容器”。

常见命名空间包括:

  • root\cimv2
  • root\default
  • root\subscription
  • root\securitycenter2

其中最常见的就是:

root\cimv2

很多常用类都在这里。


3.2 Class(类)

类可以理解为一个模板。
比如Win32_OperatingSystem这个类,就是“操作系统对象”的模板。

它规定了:

  • 这个对象有哪些属性
  • 可以做哪些操作
  • 会暴露什么信息

3.3 Instance(实例)

实例就是类在系统中的真实对象。

例如:

  • Win32_OperatingSystem这个类,通常会对应当前系统这一条实例
  • Win32_Process这个类,会对应系统里当前运行的多个进程实例
  • Win32_Service这个类,会对应系统中的多个服务实例

类是模板,实例才是真实数据。


3.4 Property(属性)

属性就是对象的具体信息,比如:

  • Name
  • Version
  • Manufacturer
  • Status
  • ProcessId

这些字段就是 WMI 查询时最常看到的内容。


3.5 Method(方法)

方法表示这个对象可以执行的动作。

例如某些服务类对象可能支持:

  • StartService()
  • StopService()

这说明 WMI 不只是“读”,还可以“管”。


3.6 Provider(提供程序)

Provider 是整个 WMI 体系中非常关键但容易被忽略的一层。

它的作用是:

把底层真实系统数据映射成 WMI 对象,让外部工具能够统一访问。

也就是说:

WMI 本身更像一个统一访问框架,真正的数据通常来自具体的 Provider 和系统组件。


4. WMI 的工作流程:一次查询是怎么走通的?

理解 WMI 还有一个很重要的角度,就是它的工作链路。

当我们执行一条 WMI 查询时,并不是“命令一打,结果直接出来”那么简单。
它背后其实有一条完整的数据流。


从这张图可以看到,WMI 查询通常会经历以下过程:

4.1 发起请求

请求可能来自:

  • PowerShell
  • VBScript
  • WMIC(旧)
  • 第三方管理工具
  • 自动化平台
  • 企业运维脚本

4.2 进入 WMI API / COM 接口

工具不是直接去读系统底层,而是先通过 WMI 的接口层进入。

这一层负责:

  • 接收请求
  • 封装为 WMI 调用
  • 交给 WMI 服务处理

4.3 WMI 服务(Winmgmt)接收请求

WMI 服务会对请求进行:

  • 接收
  • 验证
  • 路由
  • 分发

这是 WMI 运行的核心服务层。


4.4 解析命名空间与类

系统会定位到具体的:

  • Namespace
  • Class
  • 查询对象

并根据查询内容决定应该调用哪个 Provider。


4.5 调用 WMI Provider

Provider 去访问底层真实组件,比如:

  • 硬件
  • 进程
  • 服务
  • 网络配置
  • 事件数据

然后把这些数据按 WMI 模型返回回来。


4.6 返回结果

最后,查询结果再回到上层工具,比如 PowerShell 窗口中输出。

所以一次 WMI 查询的本质流程可以概括为:

PowerShell / 管理工具 / 脚本

WMI API / COM 接口

WMI 服务 Winmgmt

命名空间与类解析

对应 Provider

底层系统真实数据

这张链路图很重要,因为它解释了为什么 WMI 不是简单命令,而是一套体系化的管理通道。


5. WMI 能做什么?为什么它在运维里特别重要?

对于桌面运维、系统管理员、自动化工程师来说,WMI 最有价值的地方在于:

它把“信息查询、对象管理、事件监控、脚本自动化、远程运维”串成了一条线。


从图中我们可以看到,WMI 最常见的能力包括:

5.1 信息查询

例如:

  • 系统版本
  • 当前用户
  • 安装补丁
  • BIOS 信息
  • 主板信息

5.2 硬件清点

例如:

  • CPU
  • 内存
  • 磁盘
  • 网卡
  • 显示器信息

这在企业资产盘点中非常实用。


5.3 服务与进程管理

例如:

  • 查询服务状态
  • 查询进程状态
  • 控制某些服务启停
  • 获取进程路径、PID 等信息

5.4 事件监控

WMI 支持事件订阅,这意味着你可以:

  • 监控进程创建
  • 监控 USB 插入
  • 监控系统状态变化
  • 接收触发式告警

5.5 脚本自动化

WMI 与 PowerShell 结合后,威力非常大。
我们可以做:

  • 批量采集信息
  • 批量巡检
  • 自动生成报表
  • 远程查询
  • 故障定位辅助脚本

这也是为什么很多企业 IT 场景里,WMI 经常被拿来作为底层信息源。


6. 从企业桌面运维视角理解 WMI

如果你是桌面支持工程师,WMI 的价值会更直观。

因为你日常面对的问题,很多都可以通过 WMI 先拿到关键数据。


比如在企业桌面运维场景中,WMI 常见用途包括:

场景WMI 可以做什么
终端资产采集获取序列号、型号、BIOS、硬盘信息
故障排查读取启动项、事件、性能相关对象
服务与进程检查查询服务状态、进程路径、依赖关系
网络配置读取获取 IP、DNS、网关、网卡信息
自动化脚本做批量巡检、远程查询、报表输出

这张图其实已经把 WMI 在企业桌面运维中的价值讲得很清楚了:

WMI 不只是 Windows Internals 里的理论知识,它在桌面支持现场是实实在在能用起来的。


7. 常见 WMI / CIM 查询示例

下面我给几个非常常见、非常适合入门理解的示例。

说明:现代 PowerShell 更推荐优先使用Get-CimInstance,旧写法中常见Get-WmiObject


7.1 查询操作系统信息

Get-CimInstance-ClassName Win32_OperatingSystem

也可以查看指定字段:

Get-CimInstance-ClassName Win32_OperatingSystem|Select-ObjectCaption,Version,BuildNumber,LastBootUpTime

7.2 查询 BIOS 信息

Get-CimInstance-ClassName Win32_BIOS|Select-ObjectManufacturer,SMBIOSBIOSVersion,SerialNumber

7.3 查询计算机系统信息

Get-CimInstance-ClassName Win32_ComputerSystem|Select-ObjectManufacturer,Model,UserName,TotalPhysicalMemory

7.4 查询磁盘信息

Get-CimInstance-ClassName Win32_LogicalDisk|Select-ObjectDeviceID,VolumeName,FileSystem,Size,FreeSpace

7.5 查询服务信息

Get-CimInstance-ClassName Win32_Service|Select-ObjectName,State,StartMode,StartName

7.6 查询网卡配置

Get-CimInstance-ClassName Win32_NetworkAdapterConfiguration-Filter"IPEnabled = True"|Select-ObjectDescription,IPAddress,DefaultIPGateway,DNSServerSearchOrder

这些命令背后的共同点,就是都在通过统一的 WMI / CIM 对象模型获取系统信息。


8. WMI、WMIC、CIM、PowerShell 之间到底是什么关系?

这一块很多初学者都会混淆,我这里帮你理清楚。

8.1 WMI 是底层管理体系

WMI 是 Windows 的对象管理基础设施。


8.2 WMIC 是旧的命令行工具

WMIC 是一个旧时代的命令行入口,它底层也是访问 WMI。

例如旧写法:

wmic os get Caption,Version,BuildNumber

但现在它已经逐渐退出主流,不建议作为首选。


8.3 Get-WmiObject 是旧 PowerShell 风格

例如:

Get-WmiObject-ClassWin32_OperatingSystem

这个命令很多老脚本里还会见到,但从今天的实践来看,建议逐渐转向Get-CimInstance


8.4 Get-CimInstance 是更推荐的新方式

例如:

Get-CimInstance-ClassName Win32_OperatingSystem

它背后对应的是CIM(Common Information Model)思路,更现代,也更适合新脚本。


8.5 它们的关系可以这样记

底层对象与系统数据

Provider

WMI / CIM 对象模型

Get-CimInstance

Get-WmiObject

WMIC

一句话总结:

WMI 是体系,WMIC 是旧工具,Get-WmiObject 是旧入口,Get-CimInstance 是当前更推荐的现代入口。


9. 学习 WMI 时要注意什么?

WMI 很强大,但使用时也要注意一些实际问题。

9.1 权限问题

有些 WMI 类和操作需要管理员权限。
如果权限不够,可能会报错或者返回不完整信息。


9.2 类名和命名空间要搞清楚

不是所有类都在同一个命名空间里。
大多数常用类在root\cimv2,但并不是全部。


9.3 远程连接依赖环境

如果你要做远程 WMI 查询,需要考虑:

  • 网络是否可达
  • 防火墙是否放行
  • 凭据是否正确
  • DCOM / WinRM 等配置是否满足

9.4 性能开销

高频率、大范围 WMI 查询会带来一定开销。
所以在企业批量巡检脚本中,要注意查询粒度和执行频率。


9.5 不要把 WMI 当成“万能答案”

WMI 很强,但它不是所有问题的唯一解。
实际排障中仍要结合:

  • 事件查看器
  • 任务管理器
  • 资源监视器
  • 可靠性监视器
  • ProcMon
  • Process Explorer
  • Autoruns

正确姿势不是“只看 WMI”,而是把 WMI 当成底层对象信息入口之一。


10. 本节小结

这一节的重点,不是记几个命令,而是先把 WMI 的定位建立起来。

我把今天这节内容浓缩成 6 句话:

  1. WMI 是 Windows 的统一管理基础设施。
  2. 它通过对象模型把系统信息、硬件、服务、事件等统一暴露出来。
  3. WMI 的核心理解离不开命名空间、类、实例、属性、方法和 Provider。
  4. WMI 本身更像访问框架,真实数据通常来自底层 Provider 和系统组件。
  5. 它在企业桌面运维中非常重要,尤其适合资产采集、故障排查和自动化脚本。
  6. 现代 PowerShell 实践中,更推荐优先使用 Get-CimInstance。

如果用一句最简单的话来总结:

WMI 是 Windows 管理世界里的“统一入口”,它让管理员和脚本能以对象化方式理解并管理系统。


11. 写在最后

当我们刚开始学习 Windows Internals 时,容易觉得 WMI 很抽象。
但只要你把它和企业桌面支持、PowerShell 脚本、系统资产盘点、远程管理联系起来,它就会一下子变得非常具体。

很多时候,排障不是先盯着图形界面,而是先把底层对象数据拿出来。

而 WMI,正是帮助我们完成这件事的重要抓手。

如果你后面还想继续往下学,我建议下一步重点关注:

  • WMI 常见类的分类与命名规律
  • Get-CimInstance的更多实战写法
  • WMI 事件订阅
  • WMI 在企业资产盘点中的批量化应用
  • WMI 与 PowerShell 自动化结合的落地思路

🔝 返回顶部

点击回到顶部

http://www.jsqmd.com/news/726240/

相关文章:

  • 托盘式货架助力宁波电子制造企业仓储升级,浙江双彬打造定制化存储解决方案
  • 如何快速配置八大网盘直链下载工具:终极完整指南
  • 小米AI负责人罗福莉:从Chat转向Agent,万亿Token计划背后的“冷思考”与“快突围”
  • 京东代运营如何提效?实测3家服务商数据对比 - 电商资讯
  • 别再手动FTP了!用Java NFS Client把远程服务器文件当成本地目录来操作
  • 除了Stellar,还有哪些Excel文件修复工具值得一试?一份横向评测与选择指南
  • UPDATE ... SET ... WHERE
  • 如何用gofile-downloader彻底解决Gofile文件下载限速问题
  • ISO14001环境认证:遵义红花岗企业绿色发展的硬核底气
  • DLSS Swapper终极指南:5分钟掌握游戏画质与性能的免费优化方案
  • Spring Data JPA进阶:基于Criteria API与动态实体图的复杂报表性能压榨
  • 智能制造中的JIT
  • 2026年重庆租车公司哪家好 适配川渝跨区域出行需求 主打高端服务与车况透明之选 - 深度智识库
  • 在多轮对话应用中体验通过聚合平台调用大模型的响应连贯性
  • 闲置瑞祥提货券别浪费!2026主流回收渠道全解析,新手也能轻松变现 - 京回收小程序
  • 微纳3D打印机行业标杆品牌:国产替代与进口巨头谁更强? - 品牌推荐大师
  • 额外企鹅王企鹅我去恶趣味玩儿耳热人
  • 数字化营销实战:精准投放与效果量化策略
  • 别再手动写动画了!Vue 3 + Lottie 实现炫酷交互动画(附免费资源站)
  • 国内主流防火涂料厂家综合实力排行与实测对比 - 奔跑123
  • pycatia:用Python彻底改变CATIA V5自动化设计的5大突破
  • 2026年河南全自动包装机、物料专用包装与辅助输送设备深度横评选购指南 - 企业名录优选推荐
  • 使用Taotoken为Claude Code配置稳定可靠的API后端
  • 别再死记硬背堆排序了!用Java动画图解+代码逐行拆解,5分钟搞懂Heap Sort核心
  • 五一出游预算不足 闲置京东 E 卡找喵权益快速变现 - 喵权益卡劵助手
  • 厂房无尘室洁净室工程、改造扩建承包商推荐,涵盖生物医药、电子半导体行业 - 品牌2026
  • 工业机器人预测性维护新利器:映翰通IG900边缘网关应用实践
  • 在 Taotoken 平台进行多模型 API 调用的月度账单分析与复盘
  • AI功能上线即遭审计驳回?Laravel 12 GDPR/《生成式AI服务管理暂行办法》双合规实现(含日志脱敏、Prompt审计追踪模块)
  • JHMS近期复盘:告别套路与借力权威,带你找回传播的“确定性”