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 get objects that are associated with a given object.
[!Important]
The object being used is the example Win32_Process object defined in the CIM Class Overview topic.
In this example, we want to get a list of processes that are using a given file. In CIM, the relationship between Process and File is represented through an association class called CIM_ProcessExecutable.
Get-Win32Process –ProcessFile <CimInstance#CIM_DataFile>
Here we want to find the list of processes for a given logon session (instance of Win32_LogonSession class). The Name and Id parameters have been removed to keep the example simple.
<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>
<GetCmdletParameters/>
<GetCmdlet>
<CmdletMetadata Verb="Get" HelpUri="http://link.to.online.help"/>
<GetCmdletParameters DefaultCmdletParameterSet="ByName">
<QueryableAssociations>
<Association Association="CIM_ProcessExecutable" ResultRole="Dependent" SourceRole="Antecedent">
<AssociatedInstance>
<Type PSType="Microsoft.Management.Infrastructure.CimInstance" ETSType="Microsoft.Management.Infrastructure.CimInstance#root\cimv2\CIM_DataFile"/>
<CmdletParameterMetadata PSName="ProcessFile" ValueFromPipeline="true" CmdletParameterSets="ByName ByLiteralName"/>
</AssociatedInstance>
</Association>
</QueryableAssociations>
</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 win32process* -syntax
#run the cmdlet
Get-Win32Process
#Create a local instance of CIM_File class to pass to Get-Win32Process
$file = New-CimInstance -ClassName CIM_DataFile -Namespace root/cimv2 -Property @{Name="C:\Windows\System32\wininet.dll"} -Key Name -ClientOnly
#NOTE: In most of the cases, there would be another cmdlet to get instances of CIM_DataFile
Get-Win32Process –ProcessFile $file