Discussion:
Uniquely identify x86 windows machines ?
(too old to reply)
Vilius Mockûnas
2009-09-21 08:22:33 UTC
Permalink
Hello,

How do I uniquely identify x86 windows machines using vbscript ?
OS'es are XP or Vista.
Id should be the same even os version changes (or windows are reinstalled
with other product id).
I've used computer names before that and realized that this is mistake
because computer names are beeing changed, computers are beeing joined and
unjoined from domain and etc.

Maybe there is some hardware id or something, which looks the same even os
was reinstalled ?

thanks
Vuilius
Pegasus [MVP]
2009-09-21 12:30:43 UTC
Permalink
Post by Vilius Mockûnas
Hello,
How do I uniquely identify x86 windows machines using vbscript ?
OS'es are XP or Vista.
Id should be the same even os version changes (or windows are reinstalled
with other product id).
I've used computer names before that and realized that this is mistake
because computer names are beeing changed, computers are beeing joined and
unjoined from domain and etc.
Maybe there is some hardware id or something, which looks the same even os
was reinstalled ?
thanks
Vuilius
You could use the BIOS serial number:

strComputer = "Nalle"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_BIOS",,48)
For Each objItem in colItems
Wscript.Echo "BIOS Serial Number: " & objItem.SerialNumber
Next
Vilius Mockûnas
2009-09-21 15:24:10 UTC
Permalink
Anoher guy suggested Win32_BaseBoard class SerialNumber property.
Which one is better to use ?

thanks
Vilius
Post by Pegasus [MVP]
Post by Vilius Mockûnas
Hello,
How do I uniquely identify x86 windows machines using vbscript ?
OS'es are XP or Vista.
Id should be the same even os version changes (or windows are reinstalled
with other product id).
I've used computer names before that and realized that this is mistake
because computer names are beeing changed, computers are beeing joined
and unjoined from domain and etc.
Maybe there is some hardware id or something, which looks the same even
os was reinstalled ?
thanks
Vuilius
strComputer = "Nalle"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_BIOS",,48)
For Each objItem in colItems
Wscript.Echo "BIOS Serial Number: " & objItem.SerialNumber
Next
Pegasus [MVP]
2009-09-21 15:29:00 UTC
Permalink
It's a matter of preference.
Post by Vilius Mockûnas
Anoher guy suggested Win32_BaseBoard class SerialNumber property.
Which one is better to use ?
thanks
Vilius
Post by Pegasus [MVP]
Post by Vilius Mockûnas
Hello,
How do I uniquely identify x86 windows machines using vbscript ?
OS'es are XP or Vista.
Id should be the same even os version changes (or windows are
reinstalled with other product id).
I've used computer names before that and realized that this is mistake
because computer names are beeing changed, computers are beeing joined
and unjoined from domain and etc.
Maybe there is some hardware id or something, which looks the same even
os was reinstalled ?
thanks
Vuilius
strComputer = "Nalle"
Set objWMIService = GetObject("winmgmts:\\" & strComputer &
"\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_BIOS",,48)
For Each objItem in colItems
Wscript.Echo "BIOS Serial Number: " & objItem.SerialNumber
Next
Vilius Mockûnas
2009-09-21 16:17:19 UTC
Permalink
I've just checked Win32_BaseBoard class SerialNumber property - and its
empty - the box is lenovo think centre. So only Win32_BIOS serialnumber
left - you are sure that this is unique across all computers of the same
order ? Or maybe I should concatenate with something else to be sure ?

V
Post by Pegasus [MVP]
It's a matter of preference.
Post by Vilius Mockûnas
Anoher guy suggested Win32_BaseBoard class SerialNumber property.
Which one is better to use ?
thanks
Vilius
Post by Pegasus [MVP]
Post by Vilius Mockûnas
Hello,
How do I uniquely identify x86 windows machines using vbscript ?
OS'es are XP or Vista.
Id should be the same even os version changes (or windows are
reinstalled with other product id).
I've used computer names before that and realized that this is mistake
because computer names are beeing changed, computers are beeing joined
and unjoined from domain and etc.
Maybe there is some hardware id or something, which looks the same even
os was reinstalled ?
thanks
Vuilius
strComputer = "Nalle"
Set objWMIService = GetObject("winmgmts:\\" & strComputer &
"\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_BIOS",,48)
For Each objItem in colItems
Wscript.Echo "BIOS Serial Number: " & objItem.SerialNumber
Next
Pegasus [MVP]
2009-09-21 16:39:44 UTC
Permalink
Post by Vilius Mockûnas
I've just checked Win32_BaseBoard class SerialNumber property - and its
empty - the box is lenovo think centre. So only Win32_BIOS serialnumber
left - you are sure that this is unique across all computers of the same
order ? Or maybe I should concatenate with something else to be sure ?
V
I have never had reason to use this method, so I can't be sure. Common sense
says that each manufacturer uses unique serial numbers, so I would expect
the concatenated string generated by the code below to be unique across all
computers.

strComputer = "Nalle"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_BIOS",,48)
For Each objItem in colItems
Wscript.Echo objItem.SerialNumber, "-", objItem.Name
Next
Richard Mueller [MVP]
2009-09-21 17:47:22 UTC
Permalink
Be sure to test. I have many computers where the Win32_BIOS class returns a
blank string. Probably older computers (Windows 2000), but one has XP. I
have used the Win32_LogicalDisk class to retrieve the volume serial number.
This uniquely identifies the logical disk, but will change if the drive is
replaced (or FDisk'd). For example:
=============
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,authenticationLevel=Pkt}!\\" _
& strComputer & "\root\cimv2")

Set colSettings = objRemote.ExecQuery _
("SELECT * FROM Win32_LogicalDisk WHERE Name = 'C:'")
For Each objDisk In colSettings
Wscript.Echo objDisk.VolumeSerialNumber
Next
=========
As noted, this is not a perfect solution, but it was the best I found that
worked on all computers (if they supported WMI and had a C: drive). Other
people have used OS serial number, but of course the OS can be re-installed.
--
Richard Mueller
MVP Directory Services
Hilltop Lab - http://www.rlmueller.net
--
Post by Vilius Mockûnas
I've just checked Win32_BaseBoard class SerialNumber property - and its
empty - the box is lenovo think centre. So only Win32_BIOS serialnumber
left - you are sure that this is unique across all computers of the same
order ? Or maybe I should concatenate with something else to be sure ?
V
Post by Pegasus [MVP]
It's a matter of preference.
Post by Vilius Mockûnas
Anoher guy suggested Win32_BaseBoard class SerialNumber property.
Which one is better to use ?
thanks
Vilius
Post by Pegasus [MVP]
Post by Vilius Mockûnas
Hello,
How do I uniquely identify x86 windows machines using vbscript ?
OS'es are XP or Vista.
Id should be the same even os version changes (or windows are
reinstalled with other product id).
I've used computer names before that and realized that this is mistake
because computer names are beeing changed, computers are beeing joined
and unjoined from domain and etc.
Maybe there is some hardware id or something, which looks the same
even os was reinstalled ?
thanks
Vuilius
strComputer = "Nalle"
Set objWMIService = GetObject("winmgmts:\\" & strComputer &
"\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_BIOS",,48)
For Each objItem in colItems
Wscript.Echo "BIOS Serial Number: " & objItem.SerialNumber
Next
Loading...