2009-07-23 10 views
0

Ich habe einen Typenkonflikt in meinem VBScript-Skript. Ich weiß, dass der Wert stimmt, aber ich bin mir nicht sicher, warum es so weit ist.VBScript Type Mismatch

Das ist die Linie, wo das Skript beendet:

WScript.Echo "DNS Server Search Order: " & objNicItem.DNSServerSearchOrder 

Das Skript eine Datei namens servers.txt erfordert (die eine Liste von Servern in ihm, ich bin tesing Namen meiner eigenen Workstation).

Wenn ich ein error on resume next das Skript funktioniert. Wenn jedoch die Serverliste ausgefüllt ist. Es zeigt dieselben Informationen an wie die Datei, die wiederum für jeden Host funktioniert, also ist es nicht korrekt.

'Input from the command line 
If Wscript.Arguments.Count = 0 Then 
    Wscript.Echo "Usage: DNSAudit.vbs servers.txt " 
    Wscript.Quit 
End If 

'Input from txt file 
Const ForReading = 1 
Set objArgs = WScript.Arguments 
Set objDictionary = CreateObject("Scripting.Dictionary") 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objTextFile = objFSO.OpenTextFile(ObjArgs(0), ForReading) 
i = 0 
Do Until objTextFile.AtEndOfStream 
    StrNextLine = objTextFile.ReadLine 
    objDictionary.Add i, StrNextLine 
    i = i + 1 
Loop 
For Each objItem In objDictionary 
    Computer = objDictionary.Item(objItem) 

    'For Each Computer In Wscript.Arguments 

    'remote connection to another computer other than using variables 
    'Set ObjWMIService = GetObject("Winmgmts://COMPUTERNAME") for remote connection 

    Set ObjWMIService = GetObject("Winmgmts:{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2") 
    'If Err.Number <> 0 Then 
    'WScript.Echo "**************************************************************" & vbCrLf 
    'WScript.Echo "Connection Errors" & vbCrLf 
    'WScript.Echo Computer & " " & Err.Description 
    'WScript.Echo Computer & " " & Err.Description & " investigation required!" 
    'WScript.Echo "**************************************************************" & vbCrLf 
    ''********************************************************************************************************* 
    'End if 
    WScript.Echo "**************************************************************" & vbCrLf 
    WScript.Echo "Starting Audit on " & computer 
    WScript.Echo "**************************************************************" & vbCrLf 
    WScript.Echo "**************************************************************" & vbCrLf 
    wscript.echo "List DHCP, DNS, WINS Adapter Parameters" 
    wscript.Echo "**************************************************************" & vbCrLf 

    Set colItems = objWMIService.ExecQuery _ 
     ("Select * from Win32_NetworkAdapterConfiguration") 

    For Each objNicItem in colItems 
     Wscript.Echo "DHCP Enabled: " & objNicItem.DHCPEnabled 
     Wscript.Echo "DHCP Lease Expires: " & objNicItem.DHCPLeaseExpires 
     Wscript.Echo "DHCP Lease Obtained: " & objNicItem.DHCPLeaseObtained 
     Wscript.Echo "DHCP Server: " & objNicItem.DHCPServer 
     Wscript.Echo "DNS Domain: " & objNicItem.DNSDomain 
     Wscript.Echo "DNS Domain Suffix Search Order: " & _ 
      objNicItem.DNSDomainSuffixSearchOrder 
     Wscript.Echo "DNS Enabled For WINS Resolution: " & _ 
      objNicItem.DNSEnabledForWINSResolution 
     Wscript.Echo "DNS Host Name: " & objNicItem.DNSHostName 
     WScript.Echo "DNS Server Search Order: " & objNicItem.DNSServerSearchOrder 
    WScript.Echo "Domain DNS Registration Enabled: " & objNicItem.DomainDNSRegistrationEnabled 
     Wscript.Echo "Full DNS Registration Enabled: " & _ 
      objNicItem.FullDNSRegistrationEnabled 
     Wscript.Echo "IP Address: " & objNicItem.IPAddress 
     Wscript.Echo "MAC Address: " & objNicItem.MACAddress 
     Wscript.Echo "TCP Maximum Data Retransmissions: " & _ 
      objNicItem.TcpMaxDataRetransmissions 
     Wscript.Echo "TCP NumC onnections: " & objNicItem.TcpNumConnections 
     Wscript.Echo "WINS Host Lookup File: " & objNicItem.WINSHostLookupFile 
     Wscript.Echo "WINS Primary Server: " & objNicItem.WINSPrimaryServer 
     Wscript.Echo "WINS Secondary Server: " & objNicItem.WINSSecondaryServer & vbCrLf 
     Wscript.Echo "Adaptor: " & objNicItem.Description & vbCrLf 
    Next 
Next 

Antwort

0

Es ist vollständig mit dem folgenden Code arbeiten jetzt:

Wscript.Echo "IP Address: " & objNicItem.IPAddress(0) 

Dank Jeder

3

Die DNSServerSearchOrder Eigenschaft Win32_NetworkAdapterConfiguration Objekt ist ein Array, nicht ein Wert, der (implizit) umgewandelt in eine Zeichenfolge sein kann.

Siehe MSDN on the Win32_NetworkAdapterConfiguration Class

+0

Versuchen Sie, die Klammer mit dem Backslash: '\ ('und' \) '. – Helen

+1

+1 - Link behoben. Der "Hyperlink" -Button im Editor funktioniert gut, wenn Links zu einem SO-kompatiblen Format nicht gefunden werden. ;-) – Tomalak

+0

@Helen: Dies würde bricht es sogar noch mehr. Nicht alles kann mit Backslashes vermieden werden. :-) – Tomalak

4

Das Problem ist, dass DNSServerSearchOrder eine Liste von Schlüssel/Wert-Paare ist so das Echo Befehl fehl. Sie müssen durch alle Werte wie folgt aufzählen:

If Not IsNull(objNicItem.DNSServerSearchOrder) Then 
    For x = 0 To UBound(objNicItem.DNSServerSearchOrder) 
    WScript.Echo "  " & objNicItem.DNSServerSearchOrder(x) 
    Next 
End If 
+0

Oder: 'For Each strDNS in objNicItem.DNSServerSearchOrder: WScript.Echo "" & strDNS: Next' (Doppelpunkte wegen fehlenden Zeilenumbrüchen in Kommentaren.) – Helen