vasquez155
Goto Top

Batch Ping Server

Pingen von 3 Servern, falls alle drei keine Antwort >>> Email an User

Hallo,

ich habe einen Batch geschrieben, nur leider hab ich noch ein kleines Problem.

Ich würde gerne eine Email versenden, sobald alle drei Server, die ich angepingt habe, keine Antwort liefern. Sobald einer von den dreien ein ja zurückschickt, beendet er die Schleife.

Ist dies möglich, wäre dankbar für eure Hilfe.
Anbei mein Batch:

@echo off > log.txt

for /f %%I in (IPlist.txt) do (

ping %%I | find "TTL" > nul


if errorlevel 1 echo %%I ist nicht erreichbar >> log.txt

if not errorlevel 1 echo %%I ist erreichbar >> C:\PING-log\log.txt
)


Danke euch!
Gruss

Content-ID: 124738

Url: https://administrator.de/contentid/124738

Ausgedruckt am: 26.11.2024 um 14:11 Uhr

aqui
aqui 11.09.2009, aktualisiert am 18.10.2012 um 18:39:18 Uhr
Goto Top
Vielleicht solltest du dann einmal den ursprünglichen Thread zu diesem Thema schliessen oder wenigstens einer Verweis dazuschreiben damit es nicht zig Threds zu diesem Thema gibt.. face-sad

Verbesserung PING Server-EmailUser
77559
77559 11.09.2009 um 18:42:15 Uhr
Goto Top
Ich kann mich aqui nur anschließen,

aber um dir das Zählen begreiflich zu machen:
@echo off
Set Repl=0
for /f %%I in (IPlist.txt) do ping -n 1 %%I |find "TTL" > nul && Set /A Repl+=1   
If %Repl% LSS 1 Echo Keine IP erreichbar, Sende Mail mit Blat/CDO.vbs

Gruß
LotPings
Vasquez155
Vasquez155 24.09.2009 um 09:57:51 Uhr
Goto Top
Guten Morgen,

ja da habt ihr Recht, tut mir leid.

Schaut euch mal meinen folgenden Batch bitte an:

Wenn ich aus der IPList drei Server anpinge, die es überhaupt nicht gibt, d.h. er gibt mir dreimal das Ergebnis, nicht erreichbar, dann müsste es mir doch eigentlich die Fehlermeldung TunnelisDown.txt erstellen, oder nicht?
Macht er aber nicht. Wisst Ihr an was das liegt?

Vielen Dank für eure Hilfe.

@echo off

Rem Set Reply counter

Rem for every Ip in IPList.txt do a ping and if successfull increase the reply counter
Rem a succesful ping replies with a text line containing TTL
for /F %%I in (IPList.txt) do ping -n 1 %%I |find "TTL" > nul && Set /A Repl+=1


Rem if reply counter=0 then no IP could be pinged >> tunnel is down
If %Reply% ==0 goto Tunneldown lese goto Tunnelup


:TunnelDown
Rem if TunnelsisDown.txt flag file already exists, do not send an email again
if exist TunnelisDown.txt goto else goto SendEmail


:SendEmail

Rem create TunnelsIsDown.txt glag file
Echo TunnelisDown >TunnelIsDown.txt
Goto End

:TunnelUp
Rem delete TunnelIsDown.txt flag file
Delete TunnelIsDown.txt
Goto End

:End
77559
77559 24.09.2009 um 12:28:34 Uhr
Goto Top
Hallo Vasquez,

wenn du die Variable nicht initialisierst und dann auch noch unterschiedliche Namen benutzt, kann das auch nicht funktionieren.

Aussserdem scheint mir die Verwendung der "glag" file sehr inkonsitent zu sein.

Gruß
LotPings
Vasquez155
Vasquez155 25.09.2009 um 10:00:08 Uhr
Goto Top
So jetzt habe ich es verbessert, aber habe immernoch folgendes Problem.

Es wird mir jedes mal die txt. Datei erstellt und eine Email verschickt, obwohl alle drei Server erreichbar sind. Das soll erst passieren, wenn mindestens einer von den dreien nicht erreichbar ist.

Kann mir da jemand bitte helfen?

@echo off

Rem Set Reply counter

Rem for every Ip in IPList.txt do a ping and if successfull increase the reply counter
Rem a succesful ping replies with a text line containing TTL
set Repl=0
for /F %%I in (IPList.txt) do ping -n 1 %%I |find "TTL" > nul && Set /A Repl+=1

Rem if reply counter=0 then no IP could be pinged >> tunnel is down
If %Repl% == 0 goto Tunneldown else goto Tunnelup


:TunnelDown
Rem if TunnelisDown.txt flag file already exists, do not send an email again
if exist TunnelIsDown.txt goto Ende

:SendEmail

Rem create TunnelsIsDown.txt flag file
Echo tunnel is Down > TunnelIsDown.txt

blat.exe
Goto Ende

:TunnelUp
Rem delete TunnelIsDown.txt flag file
Delete TunnelIsDown.txt
Goto Ende

:Ende
set Repl=""
77559
77559 25.09.2009 um 12:43:28 Uhr
Goto Top
Zitat von @Vasquez155:
Es wird mir jedes mal die txt. Datei erstellt und eine Email verschickt, obwohl alle drei Server erreichbar sind. Das soll erst passieren, wenn mindestens einer von den dreien nicht erreichbar ist.

Kann mir da jemand bitte helfen?

Schau dir mal
IF /?
an.

Ausserdem solltest du der besseren Lesbarkeit und Referenzierbarkeit halber deinen Code in entsprenchende Tags einbetten siehe meinen Beitrag oben oder auch die Formatierungen in den Beiträgen

Gruß
LotPings
Vasquez155
Vasquez155 25.09.2009 um 12:47:21 Uhr
Goto Top
Hallo LotPings,

ja, ich dachte mir das dort der Fehler liegt. Aber warum? Kannst du mir da bitte weiterhelfen?

Ich werde den Code nächstes mal so darstellen, wie du es mir oben angezeigt hast.

Danke!
77559
77559 25.09.2009 um 13:30:42 Uhr
Goto Top
wegen fehlender Klammern wird der Else Teil gar nicht ausgeführt und die nächste Zeile verarbeitet (er fällt quasi durch).

Wenn du die Logik mit Not umkehrst
If NOT %Repl% == 0 goto TunnelUp
:: alternativ
If %Repl% GEQ 1 goto TunnelUp

sollte es wie gewünscht funktionieren.

PS: Bei meinem IF /? zeigt er mir ein NICHT funktionierendes Beispiel das deinem entspricht - hast du dir das wirklich angesehen?

Gruß
LotPings
Vasquez155
Vasquez155 25.09.2009 um 14:27:40 Uhr
Goto Top
Hi,

ich habs jetzt hinbekommen, etwas anders, aber es funktioniert.
Vielen Dank für deine Hilfe.

Schönes Wochenende.

Gruss