WMI Win32_BaseBoard SerialNumber

2019-01-25 20:43发布

问题:

I used Win32_BaseBoard SerialNumber property to obtain the motherboard serial number and it work most of the time, but sometimes in some computers I get SerialNumber = "Base Board Serial Number" as a result.

Is there a programmatic way to obtain this serial number in a more efficient way or it is simply a manufacturer problem? I have heard that all motherboards come with a serial number with no exception. Is this true?

回答1:

Whether the Serial Number returned by various WMI queries will be correct or not will depend on the manufacturer of the device. See the answer to this stackoverflow question, Motherboard ID - WMI C++ Reliable? which contains a couple of examples showing that your results can vary.

Some of the variables are whether the equipment is OEM or not and whether the equipment was purchased from a manufacturer who sells to the end customer such as Dell or a manufacturer who sells equipment to resellers who then configure the equipment or if the equipment was assembled from purchased parts.

Those results are processing the properties retrieved by several different WMI queries.

L"SELECT * FROM Win32_SystemEnclosure",
L"SELECT * FROM Win32_BaseBoard",
L"SELECT * FROM Win32_BIOS",
L"SELECT * FROM Win32_ComputerSystem",
L"SELECT * FROM Win32_ComputerSystemProduct",
L"SELECT * FROM Win32_MotherboardDevice",

For instance here is from a point of sale terminal that shows missing serial number information. The intent seems to be that the reseller or dealer or other vendor will provide their own serial number along with other information to basically relabel the terminal.

Connected to ROOT\CIMV2 WMI namespace

Query for SELECT * FROM Win32_SystemEnclosure
  SMBIOS SerialNumber: None
  SMBIOS Name: System Enclosure
  SMBIOS SMBIOSAssetTag: None
  SMBIOS Manufacturer: To Be Filled By O.E.M.

Query for SELECT * FROM Win32_BaseBoard
  SMBIOS SerialNumber: None
  SMBIOS Product: EIN70-SAM
  SMBIOS Name: Base Board
  SMBIOS Manufacturer: INTEL Corporation

Query for SELECT * FROM Win32_BIOS
  SMBIOS SerialNumber: None
  SMBIOS Name: BIOS Date: 10/15/13 20:06:15 Ver: 04.06.05
  SMBIOS Manufacturer: American Megatrends Inc.

Query for SELECT * FROM Win32_ComputerSystem
  SMBIOS Name: GENPOSA-1
  SMBIOS Manufacturer: To be filled by O.E.M.

Query for SELECT * FROM Win32_ComputerSystemProduct
  SMBIOS Name: EIN70-SAM
  SMBIOS IdentifyingNumber: None
  SMBIOS UUID: 03000200-0400-0500-0006-000700080009


回答2:

It is possible that the information is not exposed to WMI. You can confirm this easily using wbemtest.exe (or WMI CIM Studio if you have it installed). On my current computer Win32_BaseBoard.SerialNumber is not null but an empty string. If this is the case you will need to find another way to get this information.



回答3:

I had a similar problem. You can try out this query and see if it works for you. select UUID from Win32_ComputerSystemProduct