How does ITCM determine the System Type in the agent inventory?

Document ID : KB000016904
Last Modified Date : 02/07/2018
Show Technical Document Details
Question:

How does ITCM determine the System Type in the agent inventory?

2017-12-22_12-07-01.png

Environment:
Client Automation (ITCM) -- All versions
Answer:

The system type is determined by a field read from the system bios, known as the system enclosure type or chassis type.  Reference MSDN article: https://msdn.microsoft.com/en-us/library/aa394474(v=vs.85).aspx

The following vbs script can be run to read the same value via a WMI call:

--------------------------- 
strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery( _ 
"SELECT * FROM Win32_SystemEnclosure",,48) 
For Each objItem in colItems 
Wscript.Echo "-----------------------------------" 
Wscript.Echo "Win32_SystemEnclosure instance" 
Wscript.Echo "-----------------------------------" 
If isNull(objItem.ChassisTypes) Then 
Wscript.Echo "ChassisTypes: " 
Else 
Wscript.Echo "ChassisTypes: " & Join(objItem.ChassisTypes, ",") 
End If 
Next 

---------------------------

The return value of the script can be aligned with the ChasisType values listed in the MSDN article:

Other (1)
Unknown (2)
Desktop (3)
Low Profile Desktop (4)
Pizza Box (5)
Mini Tower (6)
Tower (7)
Portable (8)
Laptop (9)
Notebook (10)
Hand Held (11)
Docking Station (12)
All in One (13)
Sub Notebook (14)
Space-Saving (15)
Lunch Box (16)
Main System Chassis (17)
Expansion Chassis (18)
SubChassis (19)
Bus Expansion Chassis (20)
Peripheral Chassis (21)
Storage Chassis (22)
Rack Mount Chassis (23)
Sealed-Case PC (24)

Additional Information:
The System "Type" field can be queried using the ITCM Query Designer:

User-added image

User-added image

Alternatively, the same can be seen captured by a SQL query:
select distinct dh.host_name,
parent.tree_name,
child.item_name,
gi.item_value_text
from ca_discovered_hardware dh
inner join inv_generalinventory_item gi on gi.object_uuid=dh.dis_hw_uuid
inner join inv_tree_name_id parent on parent.tree_name_id=gi.item_parent_name_id
inner join inv_item_name_id child on child.item_name_id=gi.item_name_id
and parent.tree_name='$System$'
and child.item_name='Type'
order by dh.host_name