Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This topic shows how to invoke an instance method using CDXML.
[!Important]
The object being used is the example Win32_Process object defined in the CIM Class Overview topic.
The following shows the syntax for various Win32 process cmdlets.
Get-Win32Process [[-Name] <string[]>]
Get-Win32Process -ProcessId <UInt32[]>
Stop-Win32Process [-Name] <string[]> [[-Reason] <UInt32>] [-WhatIf] [-Confirm]
Stop-Win32Process -ProcessId <UInt32[]> [[-Reason] <UInt32>] [-WhatIf] [-Confirm]
Stop-Win32Process -InputObject <CimInstance#Win32_Process[]>[[-Reason] <UInt32>] [-WhatIf] [-Confirm]
Debug-Win32Process [-Name] <string[]>
Debug-Win32Process -ProcessId <UInt32[]>
Debug-Win32Process -InputObject
The key points to mention when looking at the above syntax are the following.
- The Name and ProcessId parameters are used for filtering the instances of Win32_Process objects.
- There is a slight difference in the usage of the Name parameter. It is optional in the Get-Win32Process cmdlet, but mandatory in the Stop-Win32Process and Debug-Win32Process cmdlets.
- The Stop-Win32Process cmdlet supports both the WhatIf and Confirm since, per Windows PowerShell guidelines, any cmdlet that changes the state of the system should support these semantics. Because the Win32_Process WMI class does not natively support ShouldProcess, WhatIf and Confirm must be handled on the client.
As a general Windows PowerShell convention, there should not be any mandatory parameters in the default parameter set for a Get cmdlet. However, we want to make it mandatory in other cmdlets . It's common to have a set of cmdlets follow a similar pattern for query parameters. For example, the Windows PowerShell Get-Service , Set-Service, Start-Service, and Stop-Service cmdlets all have the same parameters. To minimize duplication of common parameters, CDXML allows you to define a global set of Query Parameters that is shared by all instance cmdlets. Individual cmdlets can define their own query parameters that override the global definition. It is very likely that a Get cmdlet would have slightly different parameter attributes because its default parameter set may not have any required parameters.
The following sample CDXML shows how to define the cmdlets.
<PowerShellMetadata xmlns="https://schemas.microsoft.com/cmdlets-over-objects/2009/11">
<Class ClassName="root\cimv2\Win32_Process">
<Version>2.0.0.0</Version>
<DefaultNoun>Win32Process</DefaultNoun>
<InstanceCmdlets>
<!--
Global definition for query parameters used by Stop-win32Process and Get-Win32ProcessOwner cmdlets
-->
<GetCmdletParameters DefaultCmdletParameterSet="ByName">
<QueryableProperties>
<Property PropertyName="Name">
<Type PSType="string"/>
<RegularQuery AllowGlobbing="true">
<CmdletParameterMetadata IsMandatory="true" 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>
<CmdletMetadata Verb="Get"/>
<!--
Definition of query parameters used by Get-win32Process
It does not use the global definition because the Get cmdlet should not have mandatory parameters in the default parameter set
-->
<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>
<Cmdlet>
<CmdletMetadata Verb="Stop" ConfirmImpact="Medium"/>
<Method MethodName="Terminate">
<Parameters>
<Parameter ParameterName="Reason">
<Type PSType="Uint32"/>
<CmdletParameterMetadata IsMandatory="false" Position="1"/>
</Parameter>
</Parameters>
</Method>
</Cmdlet>
<Cmdlet>
<CmdletMetadata Verb="Debug"/>
<Method MethodName="AttachDebugger">
<ReturnValue>
<Type PSType="int"/>
<CmdletOutputMetadata>
<ErrorCode/>
</CmdletOutputMetadata>
</ReturnValue>
</Method>
</Cmdlet>
</InstanceCmdlets>
<CmdletAdapterPrivateData>
<Data Name="ClientSideShouldProcess"/>
</CmdletAdapterPrivateData>
</Class>
</PowerShellMetadata>