EXPLANATION
Microsoft's World of Management Instrumentation - e.g., WMI, OMI,
CIM, and a bunch of other acronyms. I glossed over some of the finer
details, and this article is intended to provide more specificity and
accuracy - thanks to Microsoft's Keith Bankston for helping me sort
things out.
CIM and the DMTF
Let us begin with CIM. CIM stands for Common Information Model, and
it is not a tangible thing. It isn't even software. It's a set of
standards that describe how management information can be represented in
software, and it was created by the Distributed Management Task Force
(DMTF), an industry working group that Microsoft is a member of.
Old WMI, DCOM, and RPC
Back in the day - we're talking Windows NT 4.0 timeframe - Microsoft
created Windows Management Instrumentation, or WMI. This was a server
component (technically, a background service, and it ran on Workstation
as well as Server) that delivered up management information in the CIM
format. Now, at the time, the CIM standards were pretty early in their
life, and WMI complied with what existed at the time. But the standards
themselves were silent on quite a few things, like what network
communications protocol you'd use to actually talk to a server.
Microsoft opted for Distributed Component Object Model, or DCOM, which
was a very mainstream thing for them at the time. DCOM talks by using
Remote Procedure Calls, or RPCs, also a very standard thing for Windows
in those days.
New WMI, WS-MAN, and WINRM
Fast forward a bit to 2012. With Windows Management Framework 3,
Microsoft releases a new version of WMI. They fail to give it a unique
name, which causes a lot of confusion, but it complies with all the
latest CIM specifications. There's still a server-side component, but
this "new WMI" talks over WS-Management (Web Services for Management,
often written as WS-MAN) instead of DCOM/RPC. Microsoft's implementation
of WS-MAN lives in the Windows Remote Management (WinRM) service. The
PowerShell cmdlets that talk this new kind of WMI all use CIM as part of
the noun, giving us Get-CimInstance, Get-CimClass, Invoke-CimMethod,
and so on. But make no mistake - these things aren't "talking CIM,"
because CIM isn't a protocol. They're talking WS-MAN, which is what the
new CIM standard specifies.
Sidebar: From a naming perspective, Microsoft was pretty much screwed
with the new cmdlets' names, no matter what they called them. "Cim" is a
terrible part of the noun. After all, the "old WMI" was compliant with
the CIM of its day, but it didn't get to be called CIM. The new cmdlets
don't use any technology called "Cim," they're merely compliant with the
newest CIM standards. Maybe they should have been called something like
Get-Wmi2Instance, or Invoke-NewWmiMethod, but that wasn't going to make
anyone happy, either. So, Cim it is.