Question

The goal is to retrieve the Dell service tags of all systems in a list (pseudo-systems given below in place of real system names)

The following script was originally used, and works just fine.

On Error Resume Next
strComputer=InputBox ("Enter the computer name of the server you'd like to query for Service Tag")
Set objWMIservice = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
WScript.Echo "Error: " & Err.number
Set colitems = objWMIservice.ExecQuery("Select SerialNumber from Win32_BIOS", , 48)
For Each objitem In colitems
WScript.Echo "Dell Service Tag: " & objitem.SerialNumber
Next

It asks for the user to input the system name, and then retrieves the tag.
However, there are 200+ systems to run, and it'd be nice to avoid having to type them all in manually.

My attempt to do just that (below) is close to right, but fails with error 70 codes on systems that the first script finds just fine.

On Error Resume Next

Dim systems, splitSystems, objWMIservice, fso, output, tag, mystr

systems = "sys1,sys2,sys3,sys4"
splitSystems = Split(systems,",")

Set fso = CreateObject("Scripting.FileSystemObject")
Set output = fso.CreateTextFile("system_tags.csv", True)
output.WriteLine """System Name"",""Service Tag"""

For Each sys In splitSystems
    If Ping(sys) = True Then

        'Doesn't work
        mystr = "winmgmts:\\" & sys & "\root\cimv2"
        Set objWMIservice = GetObject(mystr)

        'Also doesn't work
        'Set objWMIservice = GetObject("winmgmts:\\" & sys & "\root\cimv2")

        'Works just dandy
        'Set objWMIservice = GetObject("winmgmts:\\sys1\root\cimv2")

        If Err.number <> 0 Then
            'output.WriteLine """" & sys & """,""ERROR """ & Err.number
            WScript.Echo "Set objWMIservice = GetObject('" & mystr & "') failed from Err.code:" & Err.description
        Else
            For Each objitem In objWMIservice.ExecQuery("Select SerialNumber from Win32_BIOS",,48)
                tag = objitem.SerialNumber
            Next
            output.WriteLine """" & sys & """,""" & tag & """"
        End If
    Else
        output.WriteLine """" & sys & """,""OFFLINE"""
    End If
Next

MsgBox "All done!"

Function Ping(strComputer)
    Dim objShell, boolCode
    Set objShell = CreateObject("WScript.Shell")
    boolCode = objShell.Run("Ping -n 1 -w 300 " & strComputer, 0, True)
    If boolCode = 0 Then
        Ping = True
    Else
        Ping = False
    End If
End Function

Can someone explain to me why the first two methods (commented "Doesn't work" and "Also doesn't work") fail, but hardcoding the system name works just fine?

EDIT: The lines in the latter script following the condition If Err.number <> 0 Then were updated to provide the error description. Output is as follows, with system names replaced with pseudonyms:

Set objWMIservice = GetObject('winmgmts:\\sys1\root\cimv2') failed from Err.code:Permission denied
Set objWMIservice = GetObject('winmgmts:\\sys3\root\cimv2') failed from Err.code:Permission denied

EDIT2: Further testing shows that it at least one issue is related to successfully finding the service tag of one system, and failing on the following system, which for some reason results in the previous tag being used

No correct solution

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top