Use Get-CimInstance with DCOM

Use Get-CimInstance with DCOM

PowerShell 3.0 added an alternative to Get-WmiObject: Get-CimInstance seems to work very similar and can retrieve information from the internal WMI service:

PS C:\> Get-WmiObject -Class Win32_BIOS

SMBIOSBIOSVersion : A03
Manufacturer      : Dell Inc.
Name              : A03
SerialNumber      : 5TQLM32
Version           : DELL   – 1072009

PS C:\> Get-CimInstance -Class Win32_BIOS

SMBIOSBIOSVersion : A03
Manufacturer      : Dell Inc.
Name              : A03
SerialNumber      : 5TQLM32
Version           : DELL   – 1072009

While Get-WmiObject still works, Get-CimInstance is definitely the way to go. This cmdlet supports IntelliSense completion for WMI classes (in PowerShell ISE), and the returned data has a more readable format: dates for example appear as human readible dates whereas Get-WmiObject displays the internal raw WMI date format.

The most important difference, though, is how they work across remote connections. Get-WmiObject always uses the old DCOM protocol whereas Get-CimInstance defaults to the new WSMan protocol, yet is flexible and can still fall back to DCOM when needed.

Here is a sample function that retrieves BIOS information remotely via Get-CimInstance. The function defaults to DCOM, and with the -Protocol parameter you can choose the protocol you’d like to use:

#requires -Version 3
function Get-BIOS
{
param
(
$ComputerName = $env:COMPUTERNAME,
[Microsoft.Management.Infrastructure.CimCmdlets.ProtocolType]
$Protocol = ‘DCOM’
)
$option = New-CimSessionOption -Protocol $protocol
$session = New-CimSession -ComputerName $ComputerName -SessionOption$option
Get-CimInstance -CimSession $session -ClassName Win32_BIOS
}

 

Advertisements