Get-CimClass is used to dig into the information available within a WMI class.

At its most basic level we get a set of information like this

PS> Get-CimClass -ClassName Win32_OperatingSystem | fl *

ClassName           : Win32_OperatingSystem
SuperClassName      : CIM_OperatingSystem
CimSuperClassName   : CIM_OperatingSystem
SuperClass          : Microsoft.Management.Infrastructure.CimClass
CimSuperClass       : Microsoft.Management.Infrastructure.CimClass
Namespace           : ROOT/cimv2
Properties          : {Caption, Description, InstallDate, Name...}
CimClassProperties  : {Caption, Description, InstallDate, Name...}
Qualifiers          : {Locale, UUID, dynamic, provider...}
CimClassQualifiers  : {Locale, UUID, dynamic, provider...}
Methods             : {Reboot, Shutdown, Win32Shutdown, Win32ShutdownTracker...}
CimClassMethods     : {Reboot, Shutdown, Win32Shutdown, Win32ShutdownTracker...}
CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties


We get a few parameters to work with

PS> Get-Help Get-CimClass


    Get-CimClass [[-ClassName] <string>] [[-Namespace] <string>] [-OperationTimeoutSec <UInt32>] [-ComputerName
    <string[]>] [-MethodName <string>] [-PropertyName <string>] [-QualifierName <string>]  [<CommonParameters>]

    Get-CimClass [[-ClassName] <string>] [[-Namespace] <string>] [-OperationTimeoutSec <UInt32>] -CimSession
    <CimSession[]> [-MethodName <string>] [-PropertyName <string>] [-QualifierName <string>]  [<CommonParameters>]


Want to know which WMI classes have a method called create

PS> Get-CimClass -MethodName Create

   NameSpace: ROOT/cimv2

ClassName                 Methods              Properties
---------                 -------              ----------
Win32_ShadowStorage       {Create}             {AllocatedSpace, DiffVolume, MaxSpace, UsedSpace...}
Win32_ScheduledJob        {Create, Delete}     {Caption, Description, InstallDate, Name...}
Win32_DfsNode             {Create}             {Caption, Description, InstallDate, Name...}
Win32_BaseService         {StartService, St... {Caption, Description, InstallDate, Name...}
Win32_SystemDriver        {StartService, St... {Caption, Description, InstallDate, Name...}
Win32_Service             {StartService, St... {Caption, Description, InstallDate, Name...}
Win32_TerminalService     {StartService, St... {Caption, Description, InstallDate, Name...}
Win32_Share               {Create, SetShare... {Caption, Description, InstallDate, Name...}
Win32_ClusterShare        {Create, SetShare... {Caption, Description, InstallDate, Name...}
Win32_ShadowCopy          {Create, Revert}     {Caption, Description, InstallDate, Name...}
Win32_Process             {Create, Terminat... {Caption, Description, InstallDate, Name...}


or a property called Size

PS> Get-CimClass -PropertyName Size

   NameSpace: ROOT/cimv2


We can dig deeper into a class

Get-CimClass -ClassName Win32_OperatingSystem | select -ExpandProperty Properties

provides an output like this for every property

Name               : CSName
Value              :
CimType            : String
Flags              : Property, ReadOnly, NullValue
Qualifiers         : {CIM_Key, MaxLen, Propagated, read}
ReferenceClassName :


Likewise methods

Get-CimClass -ClassName Win32_OperatingSystem | select -ExpandProperty Methods


or if you want detail on a particular method

PS> Get-CimClass -ClassName Win32_OperatingSystem | select -ExpandProperty Methods | where name -eq SetDateTime | fl *

Name       : SetDateTime
ReturnType : UInt32
Parameters : {LocalDateTime}
Qualifiers : {Implemented, Privileges, ValueMap}


And no thats not a typo on the where statement – its a new PowerShell v3 feature I’ll cover another day

Get-CimClass -ClassName Win32_OperatingSystem  | select -ExpandProperty Qualifiers


Get-CimClass -ClassName Win32_OperatingSystem  | select -ExpandProperty CimSystemProperties | fl *

do what you would expect

Finding the key property for a class is a useful exercise

Get-CimClass -ClassName Win32_Process | select -ExpandProperty Properties | where {$_.Qualifiers -like "*key*"}

returns a number of properties – some are like this

Name               : CreationClassName
Value              :
CimType            : String
Flags              : Property, ReadOnly, NullValue
Qualifiers         : {CIM_Key, MaxLen, read}
ReferenceClassName :


and have the CIM_Key qualifier but the one we are really interested in is this one

Name               : Handle
Value              :
CimType            : String
Flags              : Property, Key, ReadOnly, NullValue
Qualifiers         : {key, MaxLen, read}
ReferenceClassName :


Lots of useful information to be gained from this cmdlet. Don’t leave home to explore WMI without it.

Leave a Reply