使用 WMI

可以从客户端应用程序和脚本使用 WMI。 WMI 提供一个基础结构用于轻松发现和执行管理任务。 此外,你可以通过创建自己的 WMI 提供程序来对一组可能的管理任务进行补充。

注意

用于编写应用程序和脚本的下一代 WMI 版本是通过 Windows 管理基础结构 (MI) 提供的。 有关详细信息,请参阅 MI 提供程序和客户端

以下是本节中要讨论的主题:

从 WMI 获取数据

以下过程说明如何通过编写脚本或应用程序来从 WMI 获取数据。

通过编写脚本或应用程序从 WMI 获取数据

  1. 确定要使用哪种语言。 有关脚本的详细信息,请参阅创建 WMI 脚本。 有关 C++ 的详细信息,请参阅使用 C++ 创建 WMI 应用程序。 有关使用 C# 或 WMI .NET 的详细信息,请参阅 WMI .NET 概述

    可以使用多种语言查看或操作 WMI 数据。 下表列出了介绍如何使用脚本语言和应用程序语言获取数据的主题。

应用程序语言 主题
在 Microsoft ActiveX 脚本托管中编写的脚本,包括 Visual Basic Scripting Edition (VBScript) 和 Perl
适用于 WMI 的脚本 API
创建 WMI 脚本开始。
有关脚本代码示例,请参阅适用于脚本和应用程序的 WMI 任务和 TechNet ScriptCenter 脚本存储库。
Windows PowerShell
Windows PowerShell 入门
WMI PowerShell Cmdlet,例如 Get-WmiObject
Visual Basic 应用程序
适用于 WMI 的脚本 API
Active Server Pages
适用于 WMI 的脚本 API
创建适用于 WMI 的 Active Server Pages 开始。
C++ 应用程序
适用于 WMI 的 COM API
使用 C++ 创建 WMI 应用程序WMI C++ 应用程序示例(包含示例)开始。
用 C#、Visual Basic .NET 或 J# 编写的 .NET Framework 应用程序
Microsoft.Management.Infrastructure 命名空间中的类。
注意:System.Management 是涵盖 WMI 托管代码的原始命名空间。 但是,System.Management 的底层技术通常比 Microsoft.Management.Infrastructure 速度更慢,而且可伸缩性也不如后者。 因此,不建议为新项目使用 System.Management。 (有关 System.Management 的详细信息,请参阅 WMI .NET 概述。)
  1. 确保与远程计算机的连接正常。

    有关详细信息,请参阅连接到远程计算机上的 WMI

  2. 维护 WMI 安全性中所述,连接到远程计算机上的 WMI 需要正确的安全设置。 下表列出了介绍如何使用脚本和应用程序语言配置安全设置的主题。

    语言 主题
    以任何语言编写的脚本、Visual Basic 应用程序
    使用 VBScript 设置默认进程安全级别
    Active Server Pages
    为 WMI ASP 脚本配置 IIS 5 及更高版本
    C++
    使用 C++ 设置默认进程安全级别在 IWbemServices 和其他代理上设置安全性
  3. 连接到 WMI 后,可以通过查询和枚举获取数据。

    有关详细信息,请参阅操作类和实例信息使用 WQL 进行查询

  4. 注册表数据可通过 WMI 获取,你可以创建新的或修改现有的项和值。

    有关详细信息,请参阅修改系统注册表

  5. 可以通过 WMI 在每次重启系统后暂时订阅或永久订阅事件通知。

    有关详细信息,请参阅监视事件接收 WMI 事件

  6. 系统的性能计数器数据可通过 WMI 获取。

    系统性能库计数器将转换为 WMI 类。 有关详细信息,请参阅监视性能数据

  7. 适用于脚本和应用程序的 WMI 任务介绍了如何使用 WMI 执行许多管理任务。

向 WMI 提供数据

以下过程说明如何通过编写提供程序向 WMI 提供数据。

通过编写提供程序向 WMI 提供数据

  • 确定要编写的提供程序类型。

    无法在 VBScript 中编写 WMI 提供程序。 但是,可以采用其他多种方法来编写 WMI COM 提供程序:

    • 在 Visual Studio 中使用 WMI ATL 向导。

      此方法创建非托管 COM 提供程序。 有关详细信息,请参阅添加 WMI 实例提供程序添加 WMI 事件提供程序

    • 在任何集成开发环境中直接使用 COM。

      此方法创建非托管 COM 提供程序。

    • 在 .NET Framework 中使用 WMI 创建托管代码提供程序。

      此方法创建托管代码提供程序。 托管代码提供程序可以用任何 .NET Framework 语言编写,比 WMI COM 提供程序更容易编写,并且可以从基于 WMI CIM 的类(例如 Win32 类)获取数据。 但是,.NET Framework WMI 提供程序有一些限制。 有关详细信息,请参阅使用 WMI 管理应用程序

    • 不建议使用提供程序框架类

      提供程序框架已由 WMI ATL 向导取代,后者直接使用 COM 或 .NET Framework 提供程序。 不再建议使用提供程序框架类创建 WMI COM 提供程序。 下表列出了介绍如何使用 COM 或 .NET Framework 提供程序的主题。

    提供程序 主题
    与 WMI 位于同一进程中的 COM 提供程序
    向 WMI 提供数据
    COM 分离式提供程序
    在应用程序中合并提供程序
    C# 或 Visual Basic.NET 中的 .NET Framework 提供程序
    使用 WMI 管理应用程序

WMI 的重要任务

以下主题提供了有关使用 WMI 监视和控制企业组件的信息。

主题 说明
适用于脚本和应用程序的 WMI 任务
介绍如何查找要在脚本和应用程序中使用的正确 WMI 类和过程,这些脚本和应用程序执行常见的计算机和网络管理任务,例如为远程计算机添加新的打印机连接,或查找计算机上安装的所有修补程序。
创建 WMI 应用程序或脚本
任何适用于 ActiveX 对象的脚本语言(例如 VBScript 或 Perl)都可以访问 WMI 数据。 应用程序可以通过 C++ 使用适用于 WMI 的 COM API 访问 WMI,也可以通过 Visual Basic 使用 Wbemdisp.tlb 类型库适用于 WMI 的脚本 API 访问 WMI。
连接到远程计算机上的 WMI
介绍脚本、应用程序和提供程序如何与远程计算机上的 WMI 建立连接,以获取数据或者控制硬件和软件。
使用 Windows PowerShell 连接到远程计算机上的 WMI
介绍如何使用 Windows PowerShell 与远程计算机上的 WMI 建立连接,以获取数据或控制硬件和软件。
监视事件
介绍如何通过创建临时或永久 WMI 事件使用者来获取事件通知。
向 WMI 提供数据
WMI 通过从提供程序获取动态管理数据来向客户端脚本和应用程序提供这些数据。
在 64 位计算机上获取和提供数据
介绍如何在 64 位系统上访问非默认提供程序,以及提供程序编写者需知的注意事项。