Uniquely identify x86 windows machines ?

Discussion in 'Scripting' started by Vilius Mockûnas, Sep 21, 2009.

  1. 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
     
    Vilius Mockûnas, Sep 21, 2009
    #1
    1. Advertisements

  2. 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
     
    Pegasus [MVP], Sep 21, 2009
    #2
    1. Advertisements

  3. Anoher guy suggested Win32_BaseBoard class SerialNumber property.
    Which one is better to use ?

    thanks
    Vilius
     
    Vilius Mockûnas, Sep 21, 2009
    #3
  4. It's a matter of preference.

     
    Pegasus [MVP], Sep 21, 2009
    #4
  5. 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
     
    Vilius Mockûnas, Sep 21, 2009
    #5
  6. 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
     
    Pegasus [MVP], Sep 21, 2009
    #6
  7. 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
     
    Richard Mueller [MVP], Sep 21, 2009
    #7
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.