Avatar billede jakobdo Ekspert
11. september 2003 - 15:19 Der er 9 kommentarer og
1 løsning

Nslookup funktion i vbscript

Hej,
jeg har lavet følgende script:

'On Error Resume Next

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, file, fstr, strNslookup
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
Set inFile = fso.OpenTextFile("dns.txt", ForReading)
Set outFile = fso.OpenTextFile("output.txt", ForAppending)

Do While Not inFile.AtEndOfStream
    fstr = inFile.ReadLine
    'MsgBox fstr
    strNslookup = WshShell.Run ("nslookup -type=mx " & fstr & ".",1,true)
    outFile.WriteLine strNslookup
Loop

Mit formål med scriptet er/var, at den skulle lave nslookup -type=mx domæne.dk

og returner værdierne til output.dk

Dette lykkedes ikke...

Hvad gør jeg?

dns.txt er fyldt med data ala:

domæne.dk
domæne.com
domæne.no
osv....
Avatar billede adam_christensen Nybegynder
12. september 2003 - 08:14 #1
Du skal pipe outputtet fra nslookup ud i en temporær fil:
WshShell.Run ("nslookup -type=mx " & fstr & " > nsout.tmp",1,true)

Og så læse i nsout.tmp fra vbscriptet. Læs fx linie for linie og lav en InStr efter domænenavnet (fstr), dernæst en InStr efter MX for at sikre at det er en MX linie du har fat i, og så noget Split med "=" som separator. Skriv hvis du ikke kan komme videre derfra.
Avatar billede jakobdo Ekspert
12. september 2003 - 09:15 #2
Jeg har lavet følgende:

'On Error Resume Next

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, file, fstr, strNslookup
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
Set inFile = fso.OpenTextFile("dns.txt", ForReading)
Set outFile = fso.OpenTextFile("output.txt", ForAppending)

Do While Not inFile.AtEndOfStream
    fstr = inFile.ReadLine
    'MsgBox fstr
    WshShell.Run ("nslookup -type=mx " & fstr & ". > nsout.tmp",1,true)
    'outFile.WriteLine strNslookup
Loop

Det giver mig følgende fejl:
Windows Script Host
Script: C:\dns.vbs
Line:  13
Char:  69
Error:  Cannot use parentheses when calling a sub
Code:  800A0414
Source: Microsoft VBscript compilation error
Avatar billede adam_christensen Nybegynder
12. september 2003 - 09:46 #3
Fjern parenteserne omkring parametrene til WshShell.Run

Sidder netop og kigger på om jeg kan få det til at virke... ;-)
Avatar billede jakobdo Ekspert
12. september 2003 - 09:54 #4
Har prøvet uden ( ), men jeg mangler sgu min outputfil nsout.tmp
Avatar billede adam_christensen Nybegynder
12. september 2003 - 09:56 #5
ja, det ser ikke ud til at nslookup får pipet resultatet til filen. Mærkeligt, for når man gør det i en Command Prompt virker det fint.

Jeg leder stadig efter fejlen...
Avatar billede adam_christensen Nybegynder
12. september 2003 - 10:08 #6
Det virker fint hvis man ikke piper over i en fil - på min sløve pc kan jeg lige nå at se dos-vinduet med outputtet fra nslookup. Lige så snart jeg prøver at pipe over i nsout.tmp kommer der en syntaxmeddelelse i stedet for et resultat.

Som skrevet, det virker fint hvis man gør det "manuelt". Måske det har noget at gøre med den måde WSH kalder nslookup på.

Kigger lidt videre...
Avatar billede adam_christensen Nybegynder
12. september 2003 - 10:27 #7
Så lykkedes det:

WshShell.Run "%ComSpec% /c nslookup -type=mx " & fstr & "> C:\nsout.tmp", 0, True
Avatar billede adam_christensen Nybegynder
12. september 2003 - 12:23 #8
Here you go. Det er ikke super stabilt, idet svaret fra nslookup er lidt svingende. Prøv at justere pausen i WScript.Sleep linien og se hvordan der går.

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, file, fstr, strNslookup
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
Set inFile = fso.OpenTextFile("dns.txt", ForReading)
Set outFile = fso.OpenTextFile("output.txt", ForAppending)

Do While Not inFile.AtEndOfStream
  fstr = inFile.ReadLine
  WshShell.Run "%ComSpec% /c nslookup -type=mx " & fstr & "> c:\nsout.tmp", 0, True
  WScript.Sleep 1000
  Set nsFile = fso.OpenTextFile("c:\nsout.tmp", ForReading)
  Do While Not nsFile.AtEndOfStream
      sLine = nsFile.ReadLine
      If InStr(sLine, fstr) > 0 And InStr(sLine, "MX") > 0 Then
          aLine = Split(sLine, "=")
          aPriority = Split(aLine(1), ",")
          sPriority = Trim(aPriority(0))
          outFile.WriteLine fstr & "," & Trim(aLine(2)) & "," & sPriority
      End If
  Loop
  nsFile.Close
Loop

fso.DeleteFile("c:\nsout.tmp")
outFile.Close
inFile.Close
Avatar billede adam_christensen Nybegynder
12. september 2003 - 12:25 #9
Hov, der mangler lidt oprydning :-)

Set fso = Nothing
Set WshShell = Nothing
Set inFile = Nothing
Set nsFile = Nothing
Set outFile = Nothing
Avatar billede jakobdo Ekspert
12. september 2003 - 12:56 #10
Takker for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester