创建 WMI 客户端

WMI 提供了一个标准化的系统管理基础结构,可由许多不同的客户端利用。 这些客户端的范围从 wmic.exe 命令行工具到 System Center Operations Manager。 可以使用 WMI 脚本 API、本机 C++ API 或使用 System.Management .NET Framework 类库命名空间中的类型编写自己的 WMI 客户端。

如何创建 WMI 客户端

WMI 的核心功能包括从 WMI 存储库检索对象并检查这些对象的属性。 还可以选择更新这些属性,或对这些属性调用方法。 以下示例演示如何执行基本的 WMI 管理任务:检索本地计算机的名称。

术语 说明
使用 PowerShell 创建客户端
WMI 和 PowerShell 紧密集成;因此,使用 PowerShell 检索 WMI 对象只需调用 Get-WmiObject cmdlet 即可。 请注意,为了保持一致性,第一个代码片段显式声明了许多默认值;第二个假定默认值正确。

PowerShell
#explicitly states many of the default parameters $myComputer = Get-WmiObject -ComputerName "." -Namespace "root\cimv2" -Query "SELECT * FROM Win32_ComputerSystem" foreach ($computer in $myComputer) { "System Name: " + $computer.name } 

#assumes the default values are correct Get-WmiObject Win32_ComputerSystem | Format-Table "Name"

使用 VBScript 创建客户端

VBScript 是与 WMI 共同使用的原始脚本语言。 虽然 PowerShell 越来越受欢迎,但本文档中的许多现有代码示例都是用 VBScript 编写的。 请注意,此特定 VBScript 示例显式声明本地计算机路径和模拟级别;这不是必需的,但通常是最佳做法。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objItem in colItems
    Wscript.Echo "Computer Name: " & objItem.Name
Next

使用 C# 创建客户端 (Microsoft.Management.Infrastructure)

此命名空间包含使用托管代码访问 WMI 的当前解决方案,称为 Windows 管理基础结构(MI 或 WMIv2)。 目前,MI 是用于创建托管管理客户端的支持技术。 有关详细信息,请参阅如何实现托管 MI 客户端如何实现本机 MI 客户端

C#
using Microsoft.Management.Infrastructure; ... CimSession session = CimSession.Create("localHost"); IEnumerable<CimInstance> queryInstance = session.QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_ComputerSystem"); 

foreach (CimInstance cimObj in queryInstance) { Console.WriteLine(cimObj.CimInstanceProperties["Name"].ToString()); }

使用 C# 创建客户端 (System.Management)

此命名空间包含用于使用托管代码访问 WMI 的原始解决方案。 虽然 System.Management 类仍然可用,但 Microsoft.Management.Infrastructure 类通常更高效且缩放性更好。 因此,建议使用 MI 类,而不是原始 WMI 类。

C#
using Microsoft.Management.Infrastructure; ... CimSession session = CimSession.Create("localHost"); IEnumerable<CimInstance> queryInstance = session.QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_ComputerSystem"); 

foreach (CimInstance cimObj in queryInstance) { Console.WriteLine(cimObj.CimInstanceProperties["Name"].ToString()); }

下表列出了本节涵盖的主题。

主题 说明
连接到远程计算机上的 WMI 描述客户端在远程计算机上使用 WMI 基础结构时出现的许多问题。
脚本和应用程序的 WMI 任务 显示示例 WMI 客户端代码。
创建 WMI 应用程序或脚本 提供有关创建各种 WMI 客户端的信息。
监视性能数据 介绍如何使用 WMI 监视性能数据。
接收 WMI 事件 介绍如何查看 WMI 事件。
监视事件 介绍如何监视 WMI 事件。
使用 WQL 查询 介绍 WMI 查询语言 (WQL)。
查询可选功能的状态 在 Windows 7 中,WMI 实现了 Win32_OptionalFeature 类。 此类检索计算机上存在的可选功能的状态。
描述 WMI 对象的位置 重点介绍用于描述 WMI 托管实体位置的语法。
使用 WMI 访问其他操作系统功能 介绍如何编写访问设备驱动程序、Active Directory 和 SNMP 设备的 WMI 客户端。
访问互操作命名空间中的数据 关联提供程序使 Windows Management Instrumentation (WMI) 客户端能够遍历和检索来自不同命名空间的配置文件和关联的类实例。
操作类和实例信息 介绍 WMI 客户端必须执行的常见任务。
将类链接在一起 讨论视图提供程序以及如何使用它来汇集来自多个 WMI 类的信息。
修改系统注册表 介绍 WMI 客户端如何使用 WMI 来管理系统注册表信息。