如何使用Powershell通过WMI和CIM实现复杂操作?
摘要:目录WMI 和 CIM了解 WMI 和 CIMCIM 和 WMI 结构CIM 和 WMI 中的存储库命名空间类实例查找文档实际案例查询配置信息列出本地存储库命名空间和类类名前缀的意义查询语言查询实例获取实例筛选实例(Filter)WQL(W
目录WMI 和 CIM了解 WMI 和 CIMCIM 和 WMI 结构CIM 和 WMI 中的存储库命名空间类实例查找文档实际案例查询配置信息列出本地存储库命名空间和类类名前缀的意义查询语言查询实例获取实例筛选实例(Filter)WQL(WMI Query Language)连接到远程计算机WMI 连接CIM 连接查询存储库类创建会话对象使用会话配置会话选项移除会话查询和操作存储库对象发现存储库对象的方法调用存储库对象的方法直接调用使用Invoke-WmiMethod使用Invoke-CimMethod
WMI 和 CIM
了解 WMI 和 CIM
CIM 和 WMI 结构
PowerShell
|
v
CIM Cmdlets (Get-CimInstance)
|
v
WMI Service (CIMOM, winmgmt)
|
v
Provider (Win32_Service, Win32_Process, etc.)
|
v
操作系统内核 / 硬件
什么是 WMI 和 CIM?
WMI (Windows Management Instrumentation)
微软的实现,用来管理和监控 Windows 系统资源(进程、服务、网络、硬件…)。
底层基于 CIM (Common Information Model) 标准。
CIM (Common Information Model)
由 DMTF(分布式管理任务组)制定的一个 国际标准。
它规定了“如何用统一的对象模型描述系统资源”。
换句话说,CIM 是“标准规范”,而 WMI 是“微软的实现”。
可以把 CIM/WMI 架构想象成一个三层模型:
+---------------------+
| 管理应用 (PowerShell, MMC, 脚本) |
+---------------------+
| WMI / CIMOM (管理基础层) |
+---------------------+
| Providers (提供者) |
+---------------------+
| 底层操作系统 / 硬件 / 服务 |
顶层:管理应用
这是你接触到的层,例如:
PowerShell (Get-CimInstance, Get-WmiObject)
图形化工具(任务管理器、事件查看器)
第三方监控软件(如 SCCM, Nagios 插件)
应用不会直接访问硬件,而是通过 WMI/CIM API。
中间层:CIMOM / WMI 服务
CIMOM (CIM Object Manager) 是核心管理引擎。
在 Windows 中就是 WMI 服务 (winmgmt)。
功能:
接收应用请求(查询、修改)
调用正确的 Provider
返回对象化的数据
协议:
WMI 早期 → 基于 DCOM(RPC)
CIM 新架构 → 支持 WS-Man (Web Services Management)
底层:Providers(提供程序)
Provider = “翻译官”,把底层资源包装成 CIM/WMI 对象。
每种资源有不同 Provider,例如:
Win32_Process → 管理进程
Win32_Service → 管理服务
Win32_OperatingSystem → 获取操作系统信息
当你运行如下命令:
Get-WmiObject Win32_Service
实际流程是:
PowerShell 请求 CIMOM
CIMOM 找到负责“服务”的 Provider
Provider 向 Windows Service Control Manager (SCM) 取数据
数据包装成对象返回给你
CIM 与 WMI 的关系
特性
WMI (旧)
CIM (新)
标准性
微软私有实现
DMTF 标准
通信
DCOM/RPC
WS-Man (跨平台)
Cmdlet
Get-WmiObject (已过时)
Get-CimInstance
跨平台
仅限 Windows
可用于 Linux/VMware/网络设备
从 PowerShell 3.0 开始,微软推荐 用 CIM cmdlet (Get-CimInstance) 替代 WMI,因为它基于开放协议 WS-Man,能支持远程和跨平台。
