How do I obtain the computer manufacturer’s name?

Raymond Chen

Raymond


One customer wanted a way to determine the name of the
computer manufacturer.
For example, they wanted to make some function call and
get back “IBM” or “Compaq” or “Dell”.
I don’t know why they wanted this information,
and for the moment, I don’t care.



And of course, when you’re looking for information,
you don’t search MSDN; that’s for crazy people.
No, let’s just fire up regedit and hit Ctrl+F.
(I can’t imagine how many application compatibility bugs
were created by that “helpful” Ctrl+F dialog in regedit.)



The customer found the registry keys that are used
to customize the System control panel,
as well as

the OEMINFO.INI file that also takes part
.
But then the question of reliability arose.
After all, since it’s just a registry key and an INI file,
the user could just edit it and make it say anything they want.
If the customer wiped their hard drive and reinstalled Windows
from scratch, then this information would be lost, too.
This customer wanted some degree of assurance that if
the computer claimed to be a Dell, then it really was a Dell.



Enter WMI.

The Scripting Guys
are all over WMI.
If you search for the phrase “from Win32_ComputerSystem”
you will find hit after hit from the Hey, Scripting Guy!
column.



And it so happens that WMI exposes the computer manufacturer info
as well.
If you look at the scripts that the Scripting Guys put out,
probably two thirds of them fall into this pattern:



strComputer = “.”
Set objWMIService = GetObject(“winmgmts:\\” & strComputer & “\root\cimv2”)
Set colItems = objWMIService.ExecQuery(“Select * from something“)
For Each objItem in colItems
Wscript.Echo objItem.something
Next


All we have to do is fill in the “something”.



strComputer = “.”
Set objWMIService = GetObject(“winmgmts:\\” & strComputer & “\root\cimv2”)
Set colItems = objWMIService.ExecQuery(“Select * from Win32_ComputerSystem“)
For Each objItem in colItems
Wscript.Echo “System Name: ” & objItem.Name
Wscript.Echo “Manufacturer: ” & objItem.Manufacturer
Wscript.Echo “Model: ” & objItem.Model
Wscript.Echo
Next


Okay, so great, we can use WMI to get this information.
But how reliable is it?



Well, the WMI folks tell me that they get the information by
querying the
SMBIOS
directly, so it’s as reliable as your BIOS.
Major manufacturers will put their names into the BIOS¹,
but if you’re running on a home-built machine, the values
are whatever came with your motherboard.
The BIOS manufacturers typically put placeholder strings into
their SMBIOS, setting the manufacturer to a generic string like
“Manufacturer”, for example.
When the motherboard manufacturer installs the BIOS,
they’re supposed to replace the placeholder strings with
something more meaningful, but most of them don’t bother.
The result is that a machine you put together from parts
you bought at the local computer shop will most likely
just say “Manufacturer” for the manufacturer.



In summary, if you query WMI for the computer manufacturer
and it comes back “Dell”, then you can be pretty sure you have a Dell.
(Either that or somebody with way too much time on their hands
burned a custom BIOS that says “Dell”.)
On the other hand, if it comes back as “Manufacturer” then you’re
still in the dark.
All you know is you’ve got some sort of generic computer.



¹Even though major manufacturers will put their name
into the BIOS,
I’m told that if you send your computer back to the manufacturer
and they replace the motherboard,
they will sometimes forget to burn their name into the BIOS of
the replacement motherboard.
As a result, even on a name-brand computer,
you might see “Manufacturer”.

Raymond Chen
Raymond Chen

Follow Raymond   

0 comments

Comments are closed.