GetObject调用的VBScript错误

时间:2014-03-03 21:26:50

标签: windows-7 vbscript wmi

目标是检索列表中所有系统的Dell服务标签(下面给出的伪系统代替实际系统名称)

最初使用了以下脚本,并且运行正常。

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

它要求用户输入系统名称,然后检索标签 但是,有200多个系统可以运行,并且避免必须手动输入它们会很好。

我尝试这样做(下面)接近正确,但在第一个脚本找到的系统上错误70个代码失败。

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

有人可以向我解释为什么前两种方法(注释“不工作”和“也不工作”)失败,但硬编码系统名称工作正常吗?

编辑:条件If Err.number <> 0 Then之后的后一个脚本中的行已更新,以提供错误说明。输出如下,系统名称替换为假名:

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:进一步测试表明,至少有一个问题与成功查找一个系统的服务标签有关,并且在以下系统上失败,由于某种原因导致前一个tag被使用

0 个答案:

没有答案