#PSTip Converting .NET types to CIM types and vice versa
Note: This tip requires PowerShell 3.0 or above.
If you get a list of CIM class properties you’ll notice the CimType property.
PS> $class = Get-CimClass -ClassName Win32_Process
$class.CimClassProperties | Format-Table Name,CimType
Name CimType
---- -------
Caption String
Description String
InstallDate DateTime
Name String
Status String
CreationClassName String
CreationDate DateTime
CSCreationClassName String
CSName String
ExecutionState UInt16
Handle String
KernelModeTime UInt64
OSCreationClassName String
OSName String
Priority UInt32
TerminationDate DateTime
UserModeTime UInt64
WorkingSetSize UInt64
CommandLine String
ExecutablePath String
HandleCount UInt32
(...)
The CimType property specifies a CIM type, such as integer, string, or datetime. The CimConverter class allows us to convert CIM types to the equivalent .NET type using the GetDotNetType static method. The following snippet lists the values of the CimType enum and creates a table of the CIM type and its .NET equivalent.
[Microsoft.Management.Infrastructure.CimType].GetEnumNames() | ForEach-Object {
[PSCustomObject]@{
CimType = $_
NetType = [Microsoft.Management.Infrastructure.CimConverter]::GetDotNetType($_)
}
}
CimType NetType
------- -------
Unknown
Boolean System.Boolean
UInt8 System.Byte
SInt8 System.SByte
UInt16 System.UInt16
SInt16 System.Int16
UInt32 System.UInt32
SInt32 System.Int32
UInt64 System.UInt64
SInt64 System.Int64
Real32 System.Single
Real64 System.Double
Char16 System.Char
DateTime
String System.String
Reference Microsoft.Management.Infrastructure.CimInstance
Instance Microsoft.Management.Infrastructure.CimInstance
BooleanArray System.Boolean[]
UInt8Array System.Byte[]
SInt8Array System.SByte[]
UInt16Array System.UInt16[]
SInt16Array System.Int64[]
UInt32Array System.UInt32[]
SInt32Array System.Int32[]
UInt64Array System.UInt64[]
SInt64Array System.Int64[]
Real32Array System.Single[]
Real64Array System.Double[]
Char16Array System.Char[]
DateTimeArray
StringArray System.String[]
ReferenceArray Microsoft.Management.Infrastructure.CimInstance[]
InstanceArray Microsoft.Management.Infrastructure.CimInstance[]
The GetCimType static method allows us to go the other direction and convert a .NET type to CIM type. A value of ‘Unknown’ is returned if the mapping is ambiguous.
[Microsoft.Management.Infrastructure.CimConverter]::GetCimType('int') SInt32Share on: