Solved

Script nslookup results to output file

Posted on 2007-03-22
3
3,716 Views
Last Modified: 2012-06-21
I am trying to edit a vbscript to input a txt file list of ipaddresses to nslookup and output the computernames into a file. My code is almost there but still not working right. It inputs the ipaddresses but returns the same ipaddresses not the computer names. It also creates a new file for each ipaddress. I would like the results to append all to one file. Any help is appreciated. Here is my code:

Const ForReading = 1
Const ForAppending = 2


Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile ("listofIPAddresses.txt", ForReading)


Do Until objTextFile.AtEndOfStream


   strIPAddress = objTextFile.Readline
   If strIPAddress <> "" Then


     If IsConnectible(strIPAddress, "", "") Then
       

       strComputerName = NSlookup(strIPAddress)
       If strComputerName = "" Then
         strComputerName = strIPAddress
       End If


       Set objLogFile = objFSO.CreateTextFile _
           (strComputerName & ".csv", ForWriting, True)
      


             objLogFile.Write strComputerName
      'objLogFile.Write nslookupvalue
       objLogFile.Close


     Else
       ' here you might want to report somewhere else that the script was
       ' not able to connect to the computer
       WScript.Echo "Could not connect to IP address " & strIPAddress
     End If


   End If
Loop


objTextFile.Close
wscript.echo "files are done"


Function IsConnectible(sHost, iPings, iTO)
   ' Returns True or False based on the output from ping.exe
   '
   ' Author: Alex Angelopoulos/Torgeir Bakken
   ' Works an "all" WSH versions
   ' sHost is a hostname or IP
   ' iPings is number of ping attempts
   ' iTO is timeout in milliseconds
   ' if values are set to "", then defaults below used


   Const OpenAsASCII      =  0
   Const FailIfNotExist   =  0
   Const ForReading       =  1
   Dim oShell, oFSO, sTempFile, fFile


   If iPings = "" Then iPings = 2
   If iTO = "" Then iTO = 750


   Set oShell = CreateObject("WScript.Shell")
   Set oFSO = CreateObject("Scripting.FileSystemObject")


   sTempFile = oFSO.GetSpecialFolder(2).ShortPath & "\" & oFSO.GetTempName


   oShell.Run "%comspec% /c ping.exe -n " & iPings & " -w " & iTO _
      & " " & sHost & ">" & sTempFile, 0 , True


   Set fFile = oFSO.OpenTextFile(sTempFile, ForReading, _
                                     FailIfNotExist, OpenAsASCII)


   sResults = fFile.ReadAll
   fFile.Close
   oFSO.DeleteFile(sTempFile)
   IsConnectible = CBool(InStr(sResults, "TTL="))


End Function



Function NSlookup(sHost)
   ' Both IP address and DNS name is allowed
   ' Function will return the opposite


   Set oRE = New RegExp
   oRE.Pattern = "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"
   bInpIP = False
   If oRE.Test(sHost) Then
     bInpIP = True
   End If


   Set oShell = CreateObject("Wscript.Shell")
   Set oFS = CreateObject("Scripting.FileSystemObject")


   sTemp = oShell.ExpandEnvironmentStrings("%TEMP%")
   sTempFile = sTemp & "\" & oFS.GetTempName


   'Run NSLookup via Command Prompt
   'Dump results into a temp text file
   oShell.Run "%ComSpec% /c nslookup.exe " & sHost _
       & " >" & sTempFile, 0, True


   'Open the temp Text File and Read out the Data
   Set oTF = oFS.OpenTextFile(sTempFile)


   'Parse the text file
   Do While Not oTF.AtEndOfStream
     sLine = Trim(oTF.Readline)
     If LCase(Left(sLine, 5)) = "name:" Then
       sData = Trim(Mid(sLine, 6))
       If Not bInpIP Then
         'Next line will be IP address(es)
         'Line can be prefixed with "Address:" or "Addresses":
         aLine = Split(oTF.Readline, ":")
         sData = Trim(aLine(1))
       End If
       Exit Do
     End If
   Loop


   'Close it
   oTF.Close
   'Delete It
   oFS.DeleteFile sTempFile


   If Lcase(TypeName(sData)) = LCase("Empty") Then
     NSlookup = "" 
   Else
     NSlookup = sData
   End If
End Function
0
Comment
Question by:snsuser
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 
LVL 67

Accepted Solution

by:
sirbounty earned 250 total points
ID: 18777339
Here's the only things I found - other than this, your script seems to work..

Your constants are not correct, modify them like this:
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

The only other piece needed to make it an appendable file was this:

strOutput="C:\NS_Report.txt"
If objfso.FileExists(strOutput) Then
  Set objLogFile = objfso.OpenTextFile (strOutput, ForAppending)
Else
  Set objLogFile = objfso.CreateTextFile(strOutput, ForWriting, True)
End If
0
 

Author Comment

by:snsuser
ID: 18778824
I am just getting an empty NS_Report.txt output file. I dont think my function for nslookup is working either. Even with the original script I was only getting the ip address repeated again not the computer name?
I updated the script as commented but still having problems. The output file is blank.

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8


Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile ("listofIPAddresses.txt", ForReading)


Do Until objTextFile.AtEndOfStream


   strIPAddress = objTextFile.Readline
   If strIPAddress <> "" Then


     If IsConnectible(strIPAddress, "", "") Then
       

       strComputerName = NSlookup(strIPAddress)
       If strComputerName = "" Then
         strComputerName = strIPAddress
       End If


       'Set objLogFile = objFSO.CreateTextFile _
           '(strComputerName & ".csv", ForWriting, True)
      
      'Set objLogFile = objFSO.CreateTextFile _
           '(nslookupvalue & ".csv", ForWriting, True)

       'Set objFSO = CreateObject("Scripting.FileSystemObject")
       'Set objLogFile = objFSO.CreateTextFile(nslookupvalue & ".csv", ForWriting, True)



             'objLogFile.Write strComputerName
      'objLogFile.Write nslookupvalue
       'objLogFile.Close

      strOutput="C:\NS_Report.txt"
If objfso.FileExists(strOutput) Then
  Set objLogFile = objfso.OpenTextFile (strOutput, ForAppending)
Else
  Set objLogFile = objfso.CreateTextFile(strOutput, ForWriting, True)
End If

     Else
       ' here you might want to report somewhere else that the script was
       ' not able to connect to the computer
       WScript.Echo "Could not connect to IP address " & strIPAddress
     End If


   End If
Loop


objTextFile.Close
wscript.echo "files are done"


Function IsConnectible(sHost, iPings, iTO)
   ' Returns True or False based on the output from ping.exe
   '
   ' Author: Alex Angelopoulos/Torgeir Bakken
   ' Works an "all" WSH versions
   ' sHost is a hostname or IP
   ' iPings is number of ping attempts
   ' iTO is timeout in milliseconds
   ' if values are set to "", then defaults below used


   Const OpenAsASCII      =  0
   Const FailIfNotExist   =  0
   Const ForReading       =  1
   Dim oShell, oFSO, sTempFile, fFile


   If iPings = "" Then iPings = 2
   If iTO = "" Then iTO = 750


   Set oShell = CreateObject("WScript.Shell")
   Set oFSO = CreateObject("Scripting.FileSystemObject")


   sTempFile = oFSO.GetSpecialFolder(2).ShortPath & "\" & oFSO.GetTempName


   oShell.Run "%comspec% /c ping.exe -n " & iPings & " -w " & iTO _
      & " " & sHost & ">" & sTempFile, 0 , True


   Set fFile = oFSO.OpenTextFile(sTempFile, ForReading, _
                                     FailIfNotExist, OpenAsASCII)


   sResults = fFile.ReadAll
   fFile.Close
   oFSO.DeleteFile(sTempFile)
   IsConnectible = CBool(InStr(sResults, "TTL="))


End Function



Function NSlookup(sHost)
   ' Both IP address and DNS name is allowed
   ' Function will return the opposite


   Set oRE = New RegExp
   oRE.Pattern = "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"
   bInpIP = False
   If oRE.Test(sHost) Then
     bInpIP = True
   End If


   Set oShell = CreateObject("Wscript.Shell")
   Set oFS = CreateObject("Scripting.FileSystemObject")


   sTemp = oShell.ExpandEnvironmentStrings("%TEMP%")
   sTempFile = sTemp & "\" & oFS.GetTempName


   'Run NSLookup via Command Prompt
   'Dump results into a temp text file
   oShell.Run "%ComSpec% /c nslookup.exe " & sHost _
       & " >" & sTempFile, 0, True


   'Open the temp Text File and Read out the Data
   Set oTF = oFS.OpenTextFile(sTempFile)


   'Parse the text file
   Do While Not oTF.AtEndOfStream
     sLine = Trim(oTF.Readline)
     If LCase(Left(sLine, 5)) = "name:" Then
       sData = Trim(Mid(sLine, 6))
       If Not bInpIP Then
         'Next line will be IP address(es)
         'Line can be prefixed with "Address:" or "Addresses":
         aLine = Split(oTF.Readline, ":")
         sData = Trim(aLine(1))
       End If
       Exit Do
     End If
   Loop


   'Close it
   oTF.Close
   'Delete It
   oFS.DeleteFile sTempFile


   If Lcase(TypeName(sData)) = LCase("Empty") Then
     NSlookup = "" 
   Else
     NSlookup = sData
   End If


strOutput="C:\NS_Report.txt"
If objfso.FileExists(strOutput) Then
  Set objLogFile = objfso.OpenTextFile (strOutput, ForAppending)
Else
  Set objLogFile = objfso.CreateTextFile(strOutput, ForWriting, True)
End If

End Function
0
 
LVL 67

Expert Comment

by:sirbounty
ID: 18779261
Looks like you've got this:
      strOutput="C:\NS_Report.txt"
If objfso.FileExists(strOutput) Then
  Set objLogFile = objfso.OpenTextFile (strOutput, ForAppending)
Else
  Set objLogFile = objfso.CreateTextFile(strOutput, ForWriting, True)
End If

in both the main code routine, as well as in the last function?

I just tried this again on my work PC and I got

server1.domain.com
????????? 'second one failed, for whatever reason...

I'm not sure why - but the first one did work.
I'm no good with regex's - so I wouldn't be of much help if that's where the problem is, but the code does seem to process correctly (well, except for the 2nd system I entered...need to check that out...)
0

Featured Post

Increase Agility with Enabled Toolchains

Connect your existing build, deployment, management, monitoring, and collaboration platforms. From Puppet to Chef, HipChat to Slack, ServiceNow to JIRA, Splunk to New Relic and beyond, hand off data between systems to engage the right people.

Connect with xMatters.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Not long ago I saw a question in the VB Script forum that I thought would not take much time. You can read that question (Question ID  (http://www.experts-exchange.com/Programming/Languages/Visual_Basic/VB_Script/Q_28455246.html)28455246) Here (http…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …
Video by: Mark
This lesson goes over how to construct ordered and unordered lists and how to create hyperlinks.

696 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question