Novell Home

How To Determine if a Computer is a Laptop or a Desktop Machine or Docking Station or ..?

Novell Cool Solutions: Feature
By Greg DeBrun

Digg This - Slashdot This

Posted: 13 Jul 2005
 

This could be helpful for setting policies, pushing out certain applications, etc. I read a lot of information about different ways to tell if the computer was a laptop like search for a battery file or power setting, but could never get a good test. The solution is my VBS script and accessing the Windows Management Instrumentation (WMI).

Windows Management Instrumentation (WMI) is the Microsoft implementation of Web-Based Enterprise Management (WBEM), which is an industry initiative to develop a standard technology for accessing management information in an enterprise environment. WMI uses the Common Information Model (CIM) industry standard to represent systems, applications, networks, devices, and other managed components. You can use WMI to automate administrative tasks in an enterprise environment.

Well, enough of the boring stuff. Here is the solution.

Solution

I put together this VBS script to assist with this problem. It turns out there's a WMI class called Win32_SystemEnclosure, and there is a ChassisTypes property which can tell you whether a computer is a laptop, a desktop, or some other kind of computer.

The Win32_SystemEnclosure WMI class represents the properties that are associated with a physical system enclosure. There are roughly 24 defined ChassisTypes. I'm not sure what some of them really are, but in our environment of around 1500 computers, we had about 5 different types.

My script will query the computer and return the ChassisTypes Value. It then looks up the value meaning and writes the entry to a key I've defined in the registry. Once the key is written, you can create your ZENworks policies and/or apps to look for this value in the registry. It's also a nice way to get a breakdown of the types of computers you have on the network.

Here is the script. Copy it to Notepad and save it as regpctype.vbs. Then create an application and force run it once on each computer to create the registry key.

Good luck.

(For some reason if you can't copy the code, let me know and I can send the file.)

Example

Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
 
strKeyPath = "SOFTWARE\DOC's Computer Type"
objReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath

Set objWMIService = GetObject("winmgmts:" _
   & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colChassis = objWMIService.ExecQuery _
   ("Select * from Win32_SystemEnclosure")
For Each objChassis in colChassis
   For  Each strChassisType in objChassis.ChassisTypes
       Select Case strChassisType
           Case 1
        strEntryName = "PCTYPE"
        strValue = "Other"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue           
           Case 2
        strEntryName = "PCTYPE"
        strValue = "Unknown"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 3
        strEntryName = "PCTYPE"
        strValue = "Desktop"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 4
        strEntryName = "PCTYPE"
        strValue = "Low Profile Desktop"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 5
        strEntryName = "PCTYPE"
        strValue = "Pizza Box"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 6
        strEntryName = "PCTYPE"
        strValue = "Mini Tower"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 7
        strEntryName = "PCTYPE"
        strValue = "Tower"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 8
        strEntryName = "PCTYPE"
        strValue = "Portable"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 9
        strEntryName = "PCTYPE"
        strValue = "Laptop"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 10
        strEntryName = "PCTYPE"
        strValue = "Notebook"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 11
        strEntryName = "PCTYPE"
        strValue = "Handheld"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 12
        strEntryName = "PCTYPE"
            objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 14
        strEntryName = "PCTYPE"
        strValue = "Sub-Notebook"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 15
        strEntryName = "PCTYPE"
        strValue = "Space Saving"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 16
        strEntryName = "PCTYPE"
        strValue = "Lunch Box"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 17
        strEntryName = "PCTYPE"
        strValue = "Main System Chassis"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 18
        strEntryName = "PCTYPE"
        strValue = "Expansion Chassis"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 19
        strEntryName = "PCTYPE"
        strValue = "Sub-Chassis"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 20
        strEntryName = "PCTYPE"
        strValue = "Bus Expansion Chassis"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 21
        strEntryName = "PCTYPE"
        strValue = "Peripheral Chassis"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 22
        strEntryName = "PCTYPE"
        strValue = "Storage Chassis"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 23
        strEntryName = "PCTYPE"
        strValue = "Rack Mount Chassis"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case 24
        strEntryName = "PCTYPE"
        strValue = "Sealed-Case PC"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           Case Else
        strEntryName = "PCTYPE"
        strValue = "Unknown"
        objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
           End Select
   Next
Next

If you have any questions you may contact Greg at gdebrun@idph.state.il.us


Novell Cool Solutions (corporate web communities) are produced by WebWise Solutions. www.webwiseone.com

© 2014 Novell