CIM sessions
Posted by: Richard Siddaway
When we last looked at the CIM cmdlets we saw that by default they use WSMAN to access remote computers but this only works if the remote computer is running PowerShell v3 with version 3.0 of the WSMAN stack.
We can force the CIM cmdlets to use DCOM by configuring a CIM session. These are analogous to PSsessions we create when using PowerShell remoting.
CIM sessions default to WSMAN – everything with CIM defaults to WSMAN unless you are accessing the local machine
PS> $sw = New-CimSession -ComputerName webr201
PS> $sw
Id : 1
Name : CimSession1
InstanceId : 91ad5f5e-d5a9-4776-9965-3c520f8bb9a0
ComputerName : webr201
Protocol : WSMAN
Get-CimInstance -CimSession $sw -ClassName Win32_ComputerSystem
Now returns the result over the session. Using a session or using
Get-CimInstance -ClassName Win32_ComputerSystem -computername webr201
both return an object of type
Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_ComputerSystem
So how do we create a session using DCOM?
PS> $opt = New-CimSessionOption -Protocol DCOM
PS> $sd = New-CimSession -ComputerName server02 -SessionOption $opt
PS> $sd
Id : 2
Name : CimSession2
InstanceId : 3066aa29-7062-423d-a0ab-13b29cd86013
ComputerName : server02
Protocol : DCOM
This session is used in the same way as a WSMAN session
Get-CimInstance -CimSession $sd -ClassName Win32_ComputerSystem
and returns the same object type.
We can even mix and match CIMsessions over WSMAN and DCOM
PS> Get-CimInstance -CimSession $sw, $sd -ClassName Win32_ComputerSystem | Format-Table Name, TotalPhysicalMemory –AutoSize
Name TotalPhysicalMemory
—- ——————-
SERVER02 17108066304
WEBR201 536403968
The CimSession parameter takes pipeline input so we can do this
Get-CimSession | Get-CimInstance -ClassName Win32_ComputerSystem | Format-Table Name, TotalPhysicalMemory –AutoSize
which has to be a cool way to access remote machines.




