PropertyDataCollection Class (System.Management)

Switch View :
ScriptFree
.NET Framework Class Library
PropertyDataCollection Class

Represents the set of properties of a WMI object.

Namespace:  System.Management
Assembly:  System.Management (in System.Management.dll)
Syntax

Visual Basic (Declaration)
Public Class PropertyDataCollection _
	Implements ICollection, IEnumerable
Visual Basic (Usage)
Dim instance As PropertyDataCollection
C#
public class PropertyDataCollection : ICollection, 
	IEnumerable
Visual C++
public ref class PropertyDataCollection : ICollection, 
	IEnumerable
JScript
public class PropertyDataCollection implements ICollection, IEnumerable
Examples

The following example lists information about the Win32_OperatingSystem class using the PropertyData class. For more information about Win32_OperatingSystem, see the Windows Management Instrumentation documentation in the MSDN Library at http://msdn.microsoft.com/library.

Visual Basic
Imports System
Imports System.Management


Public Class Sample
    Public Overloads Shared Function _
        Main(ByVal args() As String) As Integer

        ' Get the WMI class
        Dim osClass As ManagementClass = _
            New ManagementClass("Win32_OperatingSystem")

        osClass.Options.UseAmendedQualifiers = True

        ' Get the Properties in the class
        Dim properties As PropertyDataCollection = _
            osClass.Properties

        ' display the Property names
        Console.WriteLine("Property Name: ")
        For Each p As PropertyData In properties

            Console.WriteLine( _
                "---------------------------------------")
            Console.WriteLine(p.Name)
            Console.WriteLine("Description: " & _
                p.Qualifiers("Description").Value)
            Console.WriteLine()

            Console.WriteLine("Type: ")
            Console.WriteLine(p.Type)

            Console.WriteLine()

            Console.WriteLine("Qualifiers: ")
            For Each q As QualifierData In _
                p.Qualifiers

                Console.WriteLine(q.Name)
            Next
            Console.WriteLine()

            For Each c As ManagementObject In osClass.GetInstances()

                Console.WriteLine("Value: ")
                Console.WriteLine( _
                    c.Properties(p.Name.ToString()).Value)

                Console.WriteLine()
            Next
        Next

    End Function
End Class


C#
using System;
using System.Management;

public class Sample 
{    
    public static void Main() 
    {

        // Get the WMI class
        ManagementClass osClass = 
            new ManagementClass("Win32_OperatingSystem");

        osClass.Options.UseAmendedQualifiers = true;

        // Get the Properties in the class
        PropertyDataCollection properties =
            osClass.Properties;

        // display the Property names
        Console.WriteLine("Property Name: ");
        foreach (PropertyData property in properties)
        {
            Console.WriteLine(
                "---------------------------------------");
            Console.WriteLine(property.Name);
            Console.WriteLine("Description: " +
                property.Qualifiers["Description"].Value);
            Console.WriteLine();

            Console.WriteLine("Type: ");               
            Console.WriteLine(property.Type);

            Console.WriteLine();

            Console.WriteLine("Qualifiers: ");
            foreach(QualifierData q in 
                property.Qualifiers)
            {
                Console.WriteLine(q.Name);
            }
            Console.WriteLine();

            foreach (ManagementObject c in osClass.GetInstances())
            {
                Console.WriteLine("Value: ");
                Console.WriteLine(
                    c.Properties[property.Name.ToString()].Value);

                Console.WriteLine();
            }
        }    
    }
}


Inheritance Hierarchy

System.Object
  System.Management.PropertyDataCollection
Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Platforms

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Version Information

.NET Framework

Supported in: 3.5, 3.0, 2.0, 1.1, 1.0
See Also

Reference

Community Content

Thomas Lee
Notes on the sample above
Some notes on the PowerShell sample above (and the C# one too for that matter!)

  1. The script uses the WMI class Win32_OperatingSystem. This class only returns one instance (i.e. details of the OS running on this virtual/physical hardware, of which there can only be one). This means when the values are returned, you only see one value (e.g. the build number, 2600, in the sample script output - the computer this script was run is using Windows XP). For more information on this class, see http://msdn.microsoft.com/en-us/library/aa394239.aspx.
  2. If you change the class to one which has multiple instances, eg, Win32_Share, you would see the values for each occurrence. For more information on that class, see http://msdn.microsoft.com/en-us/library/aa394435.aspx.
  3. This script is useful and is intended for use in learning more about the classes, and how WMI works (i.e. what is a PropertyDataCollection!).
  4. For direct management use using PowerShell, you are probably better off just using something like "$os=GWMI Win32_OperatingSystem" then using $os variable directly (e.g. $os | fl *, etc).
  5. The property information thaat the script outputs is obtained from WMI's CIM repository. The information is supplied via MOF (Managed Object Files) typically installed when your OS is. The details in the CMI however, are not fully consistent with the reference material in the online MSDN reference. The variations are very minor so far as I can see in looking at a couple of properties.

Thomas Lee
Link to Win32_OperatingSystem Class missing in article
At the very start of the Examples section in the main article, the article presents a hyperlinked reference to the Win32_OperatingSystem class. The text above that reference, unhelpfully, the article points the reader to the base of the library rather than directly relevant content.

Here's how to improve this article:
  • In this 1st line of the example section, the text "Win32_OperatingSystem" should be hyperlinked to: http://msdn.microsoft.com/en-us/library/aa394239.aspx, which describes this WMI class.
  • Also, the reference to the "MSDN Library at http://msdn.microsoft.com/library" is not helpful either. This reference should be changed to something more useful, e.g.
For more information on WMI classes, see the WMI Class documentation at: http://msdn.microsoft.com/en-us/library/aa394554(VS.85).aspx. For more information on using WMI, see the documentation starting at http://msdn.microsoft.com/en-us/library/aa393964(VS.85).aspx.

Thomas Lee
Retreive WMI Property data using PowerShell
# get-wmiclassproperties.ps1
# Gets WMI Class property list using PowerShell
# This sample is based on the C# code above.
# Also gets property descrption and current value
# Thomas Lee - tfl@psp.co.uk

# First, get the WMI class
$osClass = new-object system.management.ManagementClass Win32_OperatingSystem
$osClass.Options.UseAmendedQualifiers = $true

# Get the Properties in the class
$properties = $osClass.Properties
"This class has {0} properties as follows:" -f $properties.count

# display the Property name, description, type, qualifiers and instance values
"Property Name:"
foreach ($property in $properties) {
"---------------------------------------"
$property.Name
"Description: " + $property.Qualifiers["Description"].Value
""
"Type: "
$property.Type
""
"Qualifiers: "
foreach($q in $property.Qualifiers) {
$q.Name
}
""
foreach ($c in $osClass.GetInstances()) {
"Value: "
$c.Properties[$property.Name.ToString()].Value
""
}
}

This script produces the following output:

PSH [D:\foo]: .\get-wmiclassproperties.ps1
This class has 61 properties as follows:
Property Name:
---------------------------------------
BootDevice
Description: The BootDevice property indicates the name of the disk drive from which
the Win32 operating system boots.
Example: \\Device\Harddisk0.

Type:
String

Qualifiers:
CIMTYPE
Description
MappingStrings
read

Value:
\Device\HarddiskVolume2

---------------------------------------
BuildNumber
Description: The BuildNumber property indicates the build number of the operating sy
stem. It can be used for more precise versioning information than product release v
ersion numbers
Example: 1381

Type:
String

Qualifiers:
CIMTYPE
Description
MappingStrings
read

Value:
2600

Remaining output snipped to save space!