WMI Tasks: Connecting to the WMI Service

To get data from WMI, either on the local computer or from a remote computer, you must connect to the WMI service by connecting to a specific namespace. In most cases, use either the shorthand moniker connection or the Locator connection. For other examples, see the TechNet ScriptCenter at https://www.microsoft.com/technet.

Remote connections require proper settings for the Windows Firewall and DCOM. For more information, see Connecting to WMI on a Remote Computer and Connecting Through Windows Firewall. Starting with Windows Vista, User Account Control (UAC) can affect WMI access. For more information, see User Account Control and WMI.

The script examples shown in this topic obtain data only from the local computer. For more information about how to use the script to obtain data from remote computers, see Connecting to WMI on a Remote Computer.

The following procedure describes how to run a script.

To run a script

  1. Copy the code and save it in a file with a .vbs extension, such as filename.vbs. Ensure that your text editor does not add a .txt extension to the file.
  2. Open a command prompt window and navigate to the directory where you saved the file.
  3. Type cscript filename.vbs at the command prompt.
  4. If you cannot access an event log, check to see if you are running from an Elevated command prompt. Some Event Log, such as the Security Event Log, may be protected by User Access Controls (UAC).

Note

By default, cscript displays the output of a script in the command prompt window. Because WMI scripts can produce large amounts of output, you might want to redirect the output to a file. Type cscript filename.vbs > outfile.txt at the command prompt to redirect the output of the filename.vbs script to outfile.txt.

The following table lists script examples that can be used to obtain various types of data from the local computer.

How do I... WMI classes or methods
...connect to a remote computer using WMI? Specify one of the following as part of your moniker connection string:
  • A NetBIOS computer name, such as "atl-dc-01"
  • A fully qualified domain name, such as "atl-dc-01.fabrikam.com"
  • An IPv4 address, such as "192.168.1.1"
  • Starting with Windows Vista, you can specify an IPv6 address if the target computer and the computer from which you are making the connection both run IPv6.
For more information, see Connecting to WMI on a Remote Computer and IPv6 and IPv4 Support in WMI.
VB
strComputer = "atl-dc-01"
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process")
For Each objProcess in colProcessList
    Wscript.Echo "Process Name: " & objProcess.Name 
Next
PowerShell
strComputer = "atl-dc-01"
Get-WmiObject -Class Win32_Process -ComputerName $strComputer -Namespace "root\cimv2" | format-list -Property Name
...run a WMI script under alternate credentials?

Use the SWbemLocator.ConnectServer method, or IWbemLocator::ConnectServer in C++, and include the appropriate user name and password. You cannot change credentials when connecting to the local computer. For more information, see Creating a WMI Script and Connecting to WMI on a Remote Computer.

VB
strComputer = "atl-dc-01"
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer (strComputer, "root\cimv2", "fabrikam\administrator", "password")
Set colProcessList = objSWbemServices.ExecQuery("Select * From Win32_Process")
For Each objProcess in colProcessList
    Wscript.Echo "Process Name: " & objProcess.Name 
Next
PowerShell
$StrComputer = "atl-dc-01"
$strCredentials = "FABRIKAM\administrator"
Get-WmiObject -Class Win32_Process -ComputerName $strComputer -Namespace "root\cimv2" -credential $strCredentials `
   -Impersonation Impersonate | format-list -Property Name

WMI Tasks for Scripts and Applications

WMI C++ Application Examples

TechNet ScriptCenter

`