Using WMI

You can use WMI from client applications and scripts. It provides an infrastructure that makes it easy to both discover and perform management tasks. In addition, you can add to the set of possible management tasks by creating your own WMI providers.

Note

The next-generation version of WMI for writing applications and scripts is available through the Windows Management Infrastructure (MI). For more information, see MI Providers and Clients.

The following topics are discussed in this section:

Obtaining Data from WMI

The following procedure describes how to obtain data from WMI by writing a script or application.

To obtain data from WMI by writing a script or application

  1. Decide which language to use. For more information about scripting, see Creating a WMI Script. For more information about C++, see Creating a WMI Application Using C++. For using more information about C# or WMI .NET, see WMI .NET Overview.

    You can view or manipulate WMI data in many languages. The following table lists the topics that describe how to use the scripting and application languages to obtain data.

Application language Topic
Scripts written in Microsoft ActiveX script hosting, including Visual Basic Scripting Edition (VBScript) and Perl
Scripting API for WMI.
Start with Creating a WMI Script.
For script code examples, see WMI Tasks for Scripts and Applications and the TechNet ScriptCenter Script Repository.
Windows PowerShell
Getting Started with Windows PowerShell
WMI PowerShell Cmdlets, such as Get-WmiObject.
Visual Basic applications
Scripting API for WMI.
Active Server Pages
Scripting API for WMI.
Start with Creating Active Server Pages for WMI.
C++ applications
COM API for WMI.
Start with Creating a WMI Application Using C++ and WMI C++ Application Examples (contains examples).
.NET Framework applications written in C#, Visual Basic .NET, or J#
Classes in the Microsoft.Management.Infrastructure namespace.
Note: System.Management was the original namespace that covered managed code for WMI. However, the underlying technology for System.Management is generally slower than, and does not scale as well as, Microsoft.Management.Infrastructure. As such, it is not recommended that you use System.Management for new projects. (For more information on System.Management, see WMI .NET Overview.)
  1. Ensure that your connections to remote computers work.

    For more information, see Connecting to WMI on a Remote Computer.

  2. Connecting to WMI on remote computers requires the correct security settings, as explained in Maintaining WMI Security. The following table lists the topics that describe how to configure security settings with the scripting and application languages.

    Language Topic
    Scripts in any language, Visual Basic applications
    Setting the Default Process Security Level Using VBScript
    Active Server Pages
    Configuring IIS 5 and Later for WMI ASP Scripting
    C++
    Setting the Default Process Security Level Using C++ and Setting the Security on IWbemServices and Other Proxies
  3. After connecting to WMI, you can obtain data through queries and enumerations.

    For more information, see Manipulating Class and Instance Information and Querying with WQL.

  4. Registry data is available through WMI and you can create new keys and values or modify existing ones.

    For more information, see Modifying the System Registry.

  5. You can subscribe to event notifications through WMI, either temporarily between system reboots or permanently.

    For more information, see Monitoring Events and Receiving a WMI Event.

  6. Performance counter data for a system is available through WMI.

    The system performance library counters are converted to WMI classes. For more information, see Monitoring Performance Data.

  7. WMI Tasks for Scripts and Applications describes how to do many administrative tasks with WMI.

Providing Data to WMI

The following procedure describes how to supply data to WMI by writing a provider.

To supply data to WMI by writing a provider

  • Decide on the type of provider to write.

    You cannot write a WMI provider in VBScript. However, you can take several other approaches to writing a WMI COM provider:

    • Using the WMI ATL Wizard in Visual Studio.

      This approach creates an unmanaged COM provider. For more information, see Adding a WMI Instance Provider and Adding a WMI Event Provider.

    • Using COM directly in any integrated development environment.

      This approach creates an unmanaged COM provider.

    • Using WMI in the .NET Framework to create a managed code provider.

      This approach creates a managed code provider. Managed code providers can be written in any .NET Framework language, are simpler to write than WMI COM providers, and can obtain data from the WMI CIM-based classes such as Win32 Classes. However, the .NET Framework WMI provider has some limitations. For more information, see Managing Applications Using WMI.

    • Using the provider framework classes is not recommended.

      The provider framework has been superseded by the WMI ATL wizards, using COM directly, or .NET Framework providers. Creating a WMI COM provider with the provider framework classes is no longer recommended. The following table lists the topics that describe how to use COM or .NET Framework providers.

    Provider Topic
    COM provider in the same process as WMI
    Providing Data to WMI
    COM decoupled provider
    Incorporating a Provider in an Application
    .NET Framework provider in C# or Visual Basic.NET
    Managing Applications Using WMI

Important Tasks for WMI

The following topics provide information about using WMI to monitor and control enterprise components.

Topic Description
WMI Tasks for Scripts and Applications
Describes how to find the correct WMI class and procedures to use in scripts and applications that perform common computer and network administration tasks, such as adding a new printer connection for a remote computer or finding all the installed hotfixes on a computer.
Creating a WMI Application or Script
Any scripting language, such as VBScript or Perl, that works with ActiveX objects can access WMI data. Applications can access WMI in C++, using the COM API for WMI or in Visual Basic, using the Wbemdisp.tlbtype library and the Scripting API for WMI.
Connecting to WMI on a Remote Computer
Describes how scripts, applications, and providers can establish connections to WMI on remote computers to obtain data or control hardware and software.
Connecting to WMI on a Remote Computer by Using Windows PowerShell
Describes how to use Windows PowerShell to establish connections to WMI on remote computers to obtain data or to control hardware and software.
Monitoring Events
Describes how to get event notifications by creating temporary or permanent WMI event consumers.
Providing Data to WMI
WMI supplies dynamic management data to client scripts and applications by obtaining it from providers.
Getting and Providing Data on a 64-bit Computer
Describes how to access nondefault providers and considerations for provider writers on 64-bit systems.