NSlookup splitten

Razortide

Grünschnabel
Ja, ich nochmal, also ich habe den Dos Befehl nslookup jetzt erfolgreich in einen String abgeschoben:

Code:
Set objShell = CreateObject("WScript.Shell")
    Set objExec = objShell.Exec("CMD /c nslookup " & strName)
    strNslookupResult = LCase(objExec.StdOut.ReadAll)

Die Ausgabe auf der Konsole sieht dann so aus (3 Möglichkeiten):

Fall 1
Server: --Nameserver--
Address: --Nameserver IP--

***--Servername-- wurde von --Nameserver-- nicht gefunden: Non-existent domain

Fall 2 (Regelfall)
Server: --Nameserver--
Address: --Nameserver IP--

Name: --Servername--
Address: --Server IP--

Fall 3
Server: --Nameserver--
Address: --Nameserver IP--

Name: --Servername--
Address: --Server IP--
Aliases: -Aliasname des Servers--

So, ich möchte hierbei die --Server IP-- haben.

Ich habs bereits über einen Split versucht
Code:
 vntResult = Split(strNslookupResult, "address:  ")

Allerdings komme ich da zu unbefriedigenden Ergebnissen:

Wenn ich in Fall 1 reinmarschiere bekomme ich einen kritischen Fehler; habe versucht es über
Code:
If (vntResult(2) = Null) Then
    vntResult(2) = " "
    End If
abzufangen, dass scheint allerdings so nicht zu gehen da er mir auch hier Fehler 9: Ausserhalb des gültigen Bereichs ausgibt.

Bei Fall 2 gibt er mir zwar die IP aus, allerdings hat er dahinter zwei Zeilenumbrüche, die durch zwei Quadrate dargestellt werden, was auch nicht so toll ist.

Fall 3 ist die Ausgabe:

--IP des Servers--

aliases: --Aliasname des Servers--

Auch hier wieder die zwei Zeilenumbrüche am Ende, sowie ein Zeilenumbruch nach der IP.

Ich möchte eigentlich -wenn vorhanden- nur die IP Adresse ausgegeben haben, ist dies nicht der Fall soll die Ausgabe ein leerer String sein.

Ich hoffe mir kann jemand helfen, ich such hier schon seit ner ganzen Weile, komme aber leider auf keinen grünen Zweig
 
Zuletzt bearbeitet:
hab jetzt momentan kein VB zur Hand, aber wenn ich mich recht entsinne, mußt Du NULL über die Funktion isNULL() abfragen. In Deinem Falle

If isNULL(vntResult(2)) Then vntResult(2) = " "
 
Nach einiger Recherche hab ich jetzt herausgefunden (ja, als Newbie ist man da stolz drauf :rolleyes: )
Das
Code:
vntResult = Split(strNslookupResult, vbCrLf)

Das Ganze in Zeilen splittet, was erstmal großartig ist, aber mein Verhängnis bleibt die Nullwert Überprüfung.

Selbst wenn ich das Array vorher initialisiere:

Code:
For a = 0 To 5
    ReDim strResult(a)
    strResult(a) = ""
    Next

Bekomm ich immer noch Laufzeitfehler 9
 
Ah, habs hinbekommen. Für den Fall das es nochmal jemand braucht:

Code:
Rem =============================
Rem == IP-Ermittlung           ==
Rem =============================

Sub Ip_Ermitteln()
  Dim strName                                As String
  Dim strNsl0okupResult                      As String
  Dim strResult()                            As String
  Dim i                                      As Integer
        
  i = 3
  
  Do While ActiveSheet.Cells(i, 2) <> ""
        
    Rem ========================================
    Rem == Name des Servers wird ausgelesen   ==
    Rem ========================================
    strName = ActiveSheet.Cells(i, 2).Value
            
    
    Rem ========================================
    Rem == Nslookup wird ausgelesen           ==
    Rem ========================================
    Set objShell = CreateObject("WScript.Shell")
    Set objExec = objShell.Exec("CMD /c nslookup " & strName)
    
    
    Rem ========================================
    Rem == Nslookup wird gesplittet           ==
    Rem ========================================
    strNslookupResult = LCase(objExec.StdOut.ReadAll)
    strResult = Split(strNslookupResult, vbCrLf)
       
       
    Rem ========================================
    Rem == Fallunterscheidung                 ==
    Rem ========================================
    If Not (UBound(strResult) < 4) Then
      If (UBound(Split(strResult(4), "address: ")) = 0) Then
        strResult = Split(strResult(4), "addresses: ")
        Else
        strResult = Split(strResult(4), "address: ")
      End If
           
      Else
      strResult(1) = ""
    End If
    

    Rem ========================================
    Rem == IP-Adresse wird geschrieben        ==
    Rem ========================================

    ActiveSheet.Cells(i, 6).Value = strResult(1)
    
    i = i + 1
  Loop
End Sub
 
Zurück