Search code examples
powershellwmiwmic

List of WMI Method Attributes


I try to access all attributes of the given method from any classes into the WMI.

For example, I can list the methods inside "Win32_SystemDriver " class

Get-WmiObject -Class Win32_SystemDriver -List | Select -ExpandProperty Methods

Name               InParameters                           OutParameters                          Origin            Qualifiers
----               ------------                           -------------                          ------            ----------
StartService                                              System.Management.ManagementBaseObject CIM_Service       {MappingStrings, Override, ValueMap}
StopService                                               System.Management.ManagementBaseObject CIM_Service       {MappingStrings, Override, ValueMap}
PauseService                                              System.Management.ManagementBaseObject Win32_BaseService {MappingStrings, ValueMap}
ResumeService                                             System.Management.ManagementBaseObject Win32_BaseService {MappingStrings, ValueMap}
InterrogateService                                        System.Management.ManagementBaseObject Win32_BaseService {MappingStrings, ValueMap}
UserControlService System.Management.ManagementBaseObject System.Management.ManagementBaseObject Win32_BaseService {MappingStrings, ValueMap}
Create             System.Management.ManagementBaseObject System.Management.ManagementBaseObject Win32_BaseService {MappingStrings, Static, ValueMap}
Change             System.Management.ManagementBaseObject System.Management.ManagementBaseObject Win32_BaseService {MappingStrings, ValueMap}
ChangeStartMode    System.Management.ManagementBaseObject System.Management.ManagementBaseObject Win32_BaseService {MappingStrings, ValueMap}
Delete                                                    System.Management.ManagementBaseObject Win32_BaseService {MappingStrings, ValueMap}

In MSDN document, Create method of the Win32_SystemDriver class has many attributes like;

uint32 Create(
  [in] string  Name,
  [in] string  DisplayName,
  [in] string  PathName,
  [in] uint8   ServiceType,
  [in] uint8   ErrorControl,
  [in] string  StartMode,
  [in] boolean DesktopInteract,
  [in] string  StartName,
  [in] string  StartPassword,
  [in] string  LoadOrderGroup,
  [in] string  LoadOrderGroupDependencies[],
  [in] string  ServiceDependencies[]
);

Can I see these properties with CIM/WMI cmdlets? Also, if it is possible I want to see with their descriptions.


Solution

  • What you call "attributes" are parameters that are passed to the Create() method. Those parameters are displayed in the Definition property of the Create() member if you run Get-Member:

    Get-WmiObject -Class Win32_SystemDriver -List | Get-Member Create | Format-List
    
    TypeName   : System.Management.ManagementClass#ROOT\cimv2\Win32_SystemDriver
    Name       : Create
    MemberType : Method
    Definition : System.Management.ManagementBaseObject Create(System.String Name, System.String DisplayName,
                 System.String PathName, System.Byte ServiceType, System.Byte ErrorControl, System.String StartMode,
                 System.Boolean DesktopInteract, System.String StartName, System.String StartPassword, System.String
                 LoadOrderGroup, System.String[] LoadOrderGroupDependencies, System.String[] ServiceDependencies
    

    If you want it as a list we can use Doug's Regex pattern:

    PS > (Get-WmiObject -Class Win32_SystemDriver -List | Get-Member Create).Definition -replace '^.+\(|\)$' -split ',\s?'
    
    System.String Name
    System.String DisplayName
    System.String PathName
    System.Byte ServiceType
    System.Byte ErrorControl
    System.String StartMode
    System.Boolean DesktopInteract
    System.String StartName
    System.String StartPassword
    System.String LoadOrderGroup
    System.String[] LoadOrderGroupDependencies
    System.String[] ServiceDependencies
    

    With some more parsing we can turn these into more readable/usable objects:

    PS > (Get-WmiObject -Class Win32_SystemDriver -List | Get-Member Create).Definition -replace '^.+\(|\)$' -split ',\s?' | ForEach-Object {
       $split = $_.Split()
       [PSCustomObject]@{
          Parameter = $split[1]
          Type = [type]$split[0]
       }
    }
    
    Parameter                  Type
    ---------                  ----
    Name                       System.String
    DisplayName                System.String
    PathName                   System.String
    ServiceType                System.Byte
    ErrorControl               System.Byte
    StartMode                  System.String
    DesktopInteract            System.Boolean
    StartName                  System.String
    StartPassword              System.String
    LoadOrderGroup             System.String
    LoadOrderGroupDependencies System.String[]
    ServiceDependencies        System.String[]
    

    We also converted the Type strings to [System.Type] objects.