SWbemObjectSet.ItemIndex method

The ItemIndex method returns the SWbemObject associated with the specified index into the collection. The index indicates the position of the element within the collection. Collection numbering starts at zero.


objWbemObject = .ItemIndex( _
  ByVal lIndex _



Index of the item in the collection.

Return value

If successful, the requested SWbemObject object returns.

Error codes

Upon completion of the Item method, the Err object may contain one of the error codes below.

wbemErrFailed - 2147749889 (0x80041001)

Unspecified error.

wbemErrInvalidParameter - 2147749896 (0x80041008)

Invalid parameter was specified. This error is returned if a negative index number is supplied.

wbemErrOutOfMemory - 2147749894 (0x80041006)

Not enough memory to complete the operation.

wbemErrNotFound - 2147749890 (0x80041002)

Requested item was not found.


The ItemIndex method allows WMI clients scripts and applications written in any language a uniform way to manipulate a collection like an array. This method can be used with SWbemObjectSet collections. Queries, such as SWbemServices.AssociatorsOf, SWbemServices.ReferencesTo, SWbemServices.InstancesOf, or SWbemServices.ExecQuery return SWbemObjectSet collections. The ItemIndex method does not work with collections which do not contain SWbemObjects, such as SWbemMethodSet, SWbemNamedValueSet, SWbemPrivilegeSet, SWbemPropertySet, and SWbemQualifierSet.

ItemIndex can also be used to obtain the single instance of a singleton class.


The following VBScript code example queries for a collection of all the Win32_Process instances then displays the names of the first three processes.

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & _
    strComputer & "\root\cimv2")

set colProcesses = _
    objWMIService.Execquery("Select * from Win32_Process")
Wscript.Echo  colProcesses.ItemIndex(0).Name
Wscript.Echo  colProcesses.ItemIndex(1).Name
Wscript.Echo  colProcesses.ItemIndex(2).Name

Only one instance of Win32_OperatingSystem exists for each operating system installation. Creating the GetObject path to obtain the single instance is awkward so scripts normally enumerate Win32_OperatingSystem even though only one instance is available. The following VBScript code example shows how to use the ItemIndex method to get to the one Win32_OperatingSystem without using a For Each loop.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colOperatingSystems = objWMIService.ExecQuery _
    ("Select * from Win32_OperatingSystem")

Wscript.Echo "Caption: " & colOperatingSystems.ItemIndex(0).Caption

The following VBScript code example gets instances associated with Win32_OperatingSystem, such as Win32_SystemOperatingSystem.

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & _
    strComputer & "\root\cimv2")

set colOS = _
    objWMIService.Execquery("Select * from Win32_OperatingSystem")
    Wscript.Echo  colOS.ItemIndex(0).Name

set colAssociators = colOS.ItemIndex(0).Associators_
    For Each Associator in colAssociators 
        Wscript.Echo Associator.Path_.RelPath  

The following code example output shows instances associated with Win32_OperatingSystem.

Windows Server 2008 
Win32_AutochkSetting.SettingID="Windows Server 2008 


Minimum supported client
Windows Vista
Minimum supported server
Windows Server 2008
Type library

See also