monitoring dns [revisited] …
update: i revised this script to add the “debug” parameter because i was having some issues with it reporting inaccurately about looking up domains. if you set this parameter to true, you’ll find a log called “dns_debug.log” in your %windir%\temp directory. anyway, i finally got it all fixed. i went ahead and updated this post along with the post date.
you might recall a previous post about monitoring dns synthetically. after much frustration with how poorly i wrote it the first time (lacking key things like sleep and retry attempts), i decided to update it a little bit to make it work better. instead of the previous two parameters, you’ll now need four.
- HostNames – comma-delimited list of hosts to query (“microsoft.com,google.com,yahoo.com”) or whatever…
- LogSuccessEvent –boolean value to log successes (very noisy)
- Repeat – how often to try before determining the query fails
- Sleep – interval between queries (in milliseconds)
- Debug – boolean value set to log activity to %windir%\temp\dns_debug.log
the event id values are still the same:
- source – DNS Synthetic Script
- 41000 – no hostnames defined
- 41001 – lookup failed
- 41002 – lookup succeeded
here’s the revised script. i’ll post it later if you want to just download it.
'========================================================================== ' NAME: DNS Lookup ' AUTHOR: Marcus Oh ' DATE: 7/16/2008 ' COMMENT: Returns 'error' if nslookup fails. ' ' 7/2/2008 Updated to include variables for iSleep and iRepeat. ' Rewrote the logic to loop hosts and lookups. ' 7/16/2008 Added Debug switch to write to log in %windir%\temp called ' dns_debug.log '========================================================================== ' Standard Event Type Numeric Values Const EVENT_TYPE_SUCCESS = 0 Const EVENT_TYPE_ERROR = 1 Const EVENT_TYPE_WARNING = 2 Const EVENT_TYPE_INFORMATION = 4 Dim iSleep, iRepeat, oLogFile Set oShell = CreateObject("Wscript.Shell") sComSpec = oShell.ExpandEnvironmentStrings("%ComSpec%") ' Parameters for MOM sHosts = ScriptContext.Parameters.Get("HostNames") bLogSuccessEvent = CBool(ScriptContext.Parameters.Get("LogSuccessEvent")) iSleep = ScriptContext.Parameters.Get("Sleep") iRepeat = ScriptContext.Parameters.Get("Repeat") bDebug = ScriptContext.Parameters.Get("Debug") If bDebug Then sWinDir = oShell.ExpandEnvironmentStrings("%WinDir%") Set oFSO = CreateObject("Scripting.FileSystemObject") Set oLogFile = oFSO.CreateTextFile(sWinDir & "\temp\dns_debug.log",True) End If aHosts = Split(sHosts,",") If Len(sHosts) > 0 Then For Each host In aHosts DNSlookup(host) Next Else CreateEvent 41000,EVENT_TYPE_INFORMATION,"DNS Synthetic Script","No host names defined." End If Function DNSlookup(sHost) sCommand = sComSpec & " /c nslookup " & sHost iSuccess = 0 For i = 0 To iRepeat f_debugLog("Executing command: " & sCommand) Set oShellRun = oShell.Exec(sCommand) Do Until oShellRun.StdOut.AtEndOfStream sLine = Trim(oShellRun.StdOut.ReadLine) f_debugLog(sLine) NameTag = LCase(Left(sLine,5)) Select Case NameTag Case "name:" iSuccess = iSuccess + 1 sData = Trim(Mid(sLine,6)) aLine = Split(sLine, ":") sData = Trim(aLine(1)) f_debugLog("Successful! Attempt #: " & iSuccess) Exit Do End Select Loop ScriptContext.Sleep(iSleep) Next f_debugLog("Total successful attempts: " & iSuccess) If iSuccess > 0 Then f_debugLog("Successfully looked up " & sHost & "." & vbTab & "Successful attempts: " & iSuccess) If bLogSuccessEvent Then CreateEvent 41002,EVENT_TYPE_INFORMATION,"DNS Synthetic Script","Successfully looked up " & sHost & "." End If Else f_debugLog("Lookup failed for " & sHost & "." & vbTab & "Successful attempts: " & iSuccess) CreateEvent 41001,EVENT_TYPE_ERROR,"DNS Synthetic Script","Lookup failed for " & sHost & "." & VbCrLf & "Successful attempts: " & iSuccess End If End Function ' Standard Event creation subroutine Sub CreateEvent(iEventNumber,iEventType,sEventSource,sEventMessage) Set oEvent = ScriptContext.CreateEvent() oEvent.EventNumber = iEventNumber oEvent.EventType = iEventType oEvent.EventSource = sEventSource oEvent.Message = sEventMessage ScriptContext.Submit oEvent End Sub Function f_debugLog(sDebugInfo) If bDebug Then oLogFile.WriteLine "DEBUG:" & sDebugInfo End If End Function
Comments
Post a Comment