WMI associations through CIM cmdlets
Posted by: Richard Siddaway
The CIM cmdlets that introduced in PowerShell v3 give us a different API for working with WMI. We can still work with associations just in a slightly different way.
NOTE – this done on a different machine to the previous one so the adapters are different
We get the instances of a WMI class like this
Get-CimInstance -ClassName Win32_NetworkAdapter
we can filter to a specific instance
Get-CimInstance -ClassName Win32_NetworkAdapter -Filter "DeviceId=7"
if we put that in a variable
$nic = Get-CimInstance -ClassName Win32_NetworkAdapter -Filter "DeviceId=7"
then we can see all of the associated classes like this
Get-CimAssociatedInstance -CimInstance $nic
You might think that we would do this to get a specific associated class
Get-CimAssociatedInstance -CimInstance $nic -Association Win32_NetworkAdapterConfiguration
Nope – we don’t just to be different.
We need to back track a minute. When two classes are linked there is normally a linking class (reference) the shows the links. We can see this by running
Get-CimClass -ClassName *NetworkAdapter*
which shows a class Win32_NetworkAdapterSetting
so if we try
PS> Get-CimInstance -ClassName Win32_NetworkAdapterSetting
Element Setting
——- ——-
Win32_NetworkAdapter (DeviceID = "0") Win32_NetworkAdapterConfiguration (Index = 0)
Win32_NetworkAdapter (DeviceID = "1") Win32_NetworkAdapterConfiguration (Index = 1)
Win32_NetworkAdapter (DeviceID = "2") Win32_NetworkAdapterConfiguration (Index = 2)
Win32_NetworkAdapter (DeviceID = "3") Win32_NetworkAdapterConfiguration (Index = 3)
Win32_NetworkAdapter (DeviceID = "4") Win32_NetworkAdapterConfiguration (Index = 4)
Win32_NetworkAdapter (DeviceID = "5") Win32_NetworkAdapterConfiguration (Index = 5)
Win32_NetworkAdapter (DeviceID = "6") Win32_NetworkAdapterConfiguration (Index = 6)
Win32_NetworkAdapter (DeviceID = "7") Win32_NetworkAdapterConfiguration (Index = 7)
Win32_NetworkAdapter (DeviceID = "8") Win32_NetworkAdapterConfiguration (Index = 8)
Win32_NetworkAdapter (DeviceID = "9") Win32_NetworkAdapterConfiguration (Index = 9)
Win32_NetworkAdapter (DeviceID = "10") Win32_NetworkAdapterConfiguration (Index = 10)
Win32_NetworkAdapter (DeviceID = "11") Win32_NetworkAdapterConfiguration (Index = 11)
Win32_NetworkAdapter (DeviceID = "12") Win32_NetworkAdapterConfiguration (Index = 12)
Which is cool – we can see the links
A quicker way to discover this linking class is to do
Get-CimClass -ClassName *NetworkAdapter* -Qualifier "Association"
Now how do we use this link
Get-CimAssociatedInstance -CimInstance $nic -Association Win32_NetworkAdapterSetting
ServiceName DHCPEnabled Index Description
———– ———– —– ———–
netvsc False 7 Microsoft Virtual Machine Bus …
which we know from the output above is the correct link
Same answer as WMI using a WQL query or GetRelated – just a different route




