03. marts 2006 - 01:39
Der er
2 kommentarer og
2 løsninger
Ping, og reager på resultatet
Er det muligt at pinge en URL, og reagere på resultatet af dette ping?
Eksempel:
Hvis ping request time out, udfør XXX.
Ellers foretag intet.
?
Slettet bruger
03. marts 2006 - 10:50
#1
Det bliver nok af omveje med mindre du kan finde noget COM som kan lave et Ping. Men en, bevars lav praktisk løsning kunne være:
1) Start ping komando og redirect (pipe) resultatet til en fil.
2) Læs filen og reager på hvad du nu måtte ønske.
Eller prøv at kigger på denne
http://www.4guysfromrolla.com/webtech/102998-1.shtml
03. marts 2006 - 13:55
#2
'------------------------------------------------------
Option Explicit
' -- Define variables
Dim wshShell
Dim objFileSystem
Dim strPingDest(1, *) ‘-* must equal the full amount of servers you want to ping
Dim objLogFile
Dim strLogData
Dim fOpenLog
Dim objMOMEvent
Dim intCounter
Dim intStart
Dim intEnd
' -- Create a Shell object
Set wshShell = CreateObject("WScript.Shell")
' -- Create a FileSystemObject
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
' -- Define ping destination
strPingDest(0, 0) = "Enter IP Address Here"
strPingDest(0, 1) = "Enter IP Address Here"
strPingDest(0, 2) = "Enter IP Address Here"
strPingDest(0, 3) = "Enter IP Address Here"
strPingDest(0, 4) = "Enter IP Address Here"
strPingDest(0, 5) = "Enter IP Address Here"
strPingDest(0, 6) = "Enter IP Address Here"
strPingDest(0, 7) = "Enter IP Address Here"
strPingDest(0, 8) = "Enter IP Address Here"
strPingDest(0, 9) = "Enter IP Address Here"
strPingDest(0, 10) = "Enter IP Address Here"
strPingDest(1, 0) = "Enter Device Name Here"
strPingDest(1, 1) = "Enter Device Name Here"
strPingDest(1, 2) = "Enter Device Name Here"
strPingDest(1, 3) = "Enter Device Name Here"
strPingDest(1, 4) = "Enter Device Name Here"
strPingDest(1, 5) = "Enter Device Name Here"
strPingDest(1, 6) = "Enter Device Name Here"
strPingDest(1, 7) = "Enter Device Name Here"
strPingDest(1, 8) = "Enter Device Name Here"
strPingDest(1, 9) = "Enter Device Name Here"
strPingDest(1, 10) = "Enter Device Name Here"
‘The above listed can be extended past just ten items if you wish, just make sure to change any array information
intCounter = 0
‘ – For intCounter must equal 0 to Maximum Number of Devices you are pinging
For intCounter = 0 to * ‘-* must equal the full amount of servers you want to ping
' -- Define log file location
objLogFile = "C:\Pinglogs\PingLog(" + strPingDest(1, intCounter) + ")[" & cStr(intCounter) & "].txt"
‘The above command will create the pinglogs that generate the error read by MOM. You must change the * to the total amount of servers you are attempting to ping, otherwise it will create quite a few errors in MOM for script failure.
' -- Run the ping and pipe output to the log file
wshShell.Run "cmd.exe /c ping " & strPingDest(0, intCounter) & " -n 2 > " & objLogFile,,true
' -- Open log file and read line 5
Set fOpenLog = objFileSystem.OpenTextFile(objLogFile, 1)
fOpenLog.ReadLine
fOpenLog.ReadLine
fOpenLog.ReadLine
fOpenLog.ReadLine
strLogData = fOpenLog.ReadLine
fOpenLog.Close
' -- Generate alert if the 5th line is Request timed out.
Select Case strLogData
Case "Request timed out." & vbCR
' -- Create error event to be submitted to MOM server (Ping Test failed)
Set objMOMEvent = ScriptContext.CreateEvent()
objMOMEvent.EventSource = "MOM Ping Monitor Tool"
objMOMEvent.EventNumber = 10002
objMOMEvent.EventType = 1
objMOMEvent.Message = "Ping Test to " & strPingDest(1, intCounter) & "(" & strPingDest(0, intCounter) & ") failed. Please investigate."
'-- Submit Created Error Event to MOM data stream
ScriptContext.Submit(objMOMEvent)
Case Else
'-- Create information event and submit to MOM data stream for tracking purposes
Set objMOMEvent = ScriptContext.CreateEvent()
objMOMEvent.EventSource = "MOM Ping Monitor Tool"
objMOMEvent.EventNumber = 10001
objMOMEvent.EventType = 4
objMOMEvent.Message = "Ping Test to " & strPingDest(1, intCounter) & "(" & strPingDest(0, intCounter) & ") succeeded. No action necessary."
'-- Submit Created Error Event to MOM data stream
ScriptContext.Submit(objMOMEvent)
End Select
Next 'intCounter
' -- Reset all variables
Set wshShell = Nothing
Set objFileSystem = Nothing
'Set strPingDest = Nothing
Set intCounter = Nothing
Set objLogFile = Nothing
Set fOpenLog = Nothing
Set strLogData = Nothing
Set objMOMEvent = Nothing
'-------------------------------------------------------
Tjah her har du en der kan lave en til MOM, nu ved jeg ikke hvor skarp du er til scripting men den kan forholdsvist nemt laves om til at lade være med at lave en event i MOM datastrømmen...
Håber du ka det til noget... det er forresten en gut på MOMCommunity der har lavet det... kunne godt være smart lige at nævne.. :d
/Leth
05. marts 2006 - 18:27
#3
Kryptus, det var nok det nærmeste en løsning jeg kommer, tak.
12. april 2006 - 14:01
#4
Selv om du har fået det svar du ønskede vil jeg da lige fortælle at jeg selv engang brugte en kom. der hed aspping
jeg brugte følgende kode (til asp) men ville nemt kunne laves om til vbs, hvis det er det du ønsker
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("ping_db.mdb")
SQLstmt = "SELECT * FROM ping ORDER BY url_tekst ASC"
Conn.Execute (SQLstmt)
Set rs = conn.Execute(SQLstmt)
DO WHILE NOT rs.EOF
url_tekst = rs("url_tekst")
url_adresse = rs("url_adresse")
%>
<%
Set Pinger = Server.CreateObject("AspPing.Conn")
Pinger.RemoteHost = url_adresse
Pinger.PingCount = 1
resultat=Pinger.Ping
Set Pinger = nothing
'Response.Write resultat
'Response.Write "Antal: "&Session("antal")
'Response.Write "<BR>"
Response.Write "<TABLE>"
if Left(resultat, 3) = "Bad" then
%>
<TABLE>
<TR>
<TD><width="50" valign="top" align="right" height="25" ><%=url_tekst%> er:</TD>
<TD><width="50" valign="top" align="right" height="25" ><FONT SIZE="" COLOR="#FF0000">OFFLINE</FONT></TD>
</TR>
</TABLE>
<%
Session("status")="OFFLINE"
else
%>
<TR>
<TD><width="50" valign="top" align="right" height="25" ><%=url_tekst%> er:</TD>
<TD><width="50" valign="top" align="right" height="25" ><FONT SIZE="" COLOR="#00FF00">ONLINE</FONT></TD>
</TR>
</TABLE>
<%
Session("status")="ONLINE"
Response.Write "<BR>"
end if
rs.MoveNext
LOOP
RS.Close
conn.Close
Set conn = nothing
Set SQLstmt = nothing