How to get an object instance

This topic illustrates how to define a simple cmdlet to get instances of an object.

[!Important]
The object being used is the example Win32_Process object defined in the CIM Class Overview topic.

 

The syntax for the Win32_Process cmdlet is as follows.

Get-Win32Process [[-Name] <string[]>] 
Get-Win32Process -ProcessId <UInt32[]> 

For the cmdlet signature, or syntax, above, we have the following information.

  • The noun for the cmdlet is Win32Process
  • The cmdlet is query only for instances (as it's a Get cmdlet).
  • The Get is a regular query expression where Win32_Process instances that match a specified ID or Name are returned.
  • The Name parameter is an optional parameter of type string that accepts wildcards.
  • The default ParameterSet is ByName.

The following CDXML defines the cmdlet.

<PowerShellMetadata xmlns="https://schemas.microsoft.com/cmdlets-over-objects/2009/11">
<!--
ClassName attribute defines the CIM Class in namespace/class format.
In this example, root/cimv2 is the namespace and Win32_process is the WMI class.
-->
<Class ClassName="root/cimv2/Win32_Process">
    <Version>2.0.0.0</Version>    <DefaultNoun>Win32Process</DefaultNoun>
    <InstanceCmdlets>
<!--
Global definition for query parameters. Not used in this example because we have a single cmdlet only.
-->

     <GetCmdletParameters/>

<!--
Definition of Get-Process cmdlet
-->
      
      <GetCmdlet>
        <CmdletMetadata Verb="Get" HelpUri="http://link.to.online.help"/>
        <GetCmdletParameters DefaultCmdletParameterSet="ByName">
        <QueryableProperties>
          <Property PropertyName="Name">
            <Type PSType="string"/>
            <RegularQuery AllowGlobbing="true">
              <CmdletParameterMetadata IsMandatory="false" Position="0"
                  ValueFromPipelineByPropertyName="true" CmdletParameterSets="ByName"/>
            </RegularQuery>
          </Property>
          <Property PropertyName="ProcessId">
            <Type PSType="uint32"/>
            <RegularQuery>
              <CmdletParameterMetadata IsMandatory="true" Aliases="ID PID"
                 CmdletParameterSets="ById"/>
            </RegularQuery>
          </Property>
        </QueryableProperties>
       </GetCmdletParameters>
      </GetCmdlet>      
    </InstanceCmdlets
  </Class>
</PowerShellMetadata>

Here is how you would use the sample CDXML in PowerShell.

#Save the sample file as CDXML (for example, Win32Process.cdxml)#Import this file in PS
Import-module .\win32Process.cdxml
#check the imported cmdlets
Get-command –module winprocess* -syntax
#run the cmdlet
Get-Win32Process
Get-Win32Process –id 0
Get-Win32Process –id 0,10,11
Get-Win32Process –Name c*
Get-Win32Process –Name a*,csrss.exe