donnerkai
Goto Top

Ping und Errorausgabe per Batch?

Hallo,

ich möchte gerne 4 verschiedene IP Adressen anpingen und das alle 3 Minuten.
Wenn keine Verbindung möglich ist, möchte ich einen Alarm in Form eines Popup oder ähnliches, ansonsten soll es im Hintergrund laufen.
Geht das per Batch?
Muss ich das Ergebnis des Ping in eine .tmp Datei schreibe und diese dann anschließend auslesen oder wie kann ich das lösen?
Bin für jeden Tipp dankbar

Content-Key: 176428

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

Printed on: April 19, 2024 at 07:04 o'clock

Member: davidl
davidl Nov 18, 2011, updated at Oct 18, 2012 at 16:49:08 (UTC)
Goto Top
So eine ähnliche Frage hatte ich auch mal

Ping errorlevel auswerten bzw. header verwerten

Die erste Antwort hat mir da sehr geholfen wie man einen Ping auswerten kann.

Lg David
Member: donnerkai
donnerkai Nov 18, 2011 at 08:09:04 (UTC)
Goto Top
Komme ich nicht so richtig mit weiter. Ich komme auch mit der Syntax nicht klar.

Ich brauche quasi die Syntax für folgenden Klartest

wenn Suchstring "XYZ" in Datei "XYZ" vorhanden
dann Ausgabe "Fehler"
ansonsten goto nächster Schritt
Member: ITSchlumpf
ITSchlumpf Nov 18, 2011 at 08:21:49 (UTC)
Goto Top
Hi,

du kannst deine IP-Adressen in ein Textfile schreiben, dieses Auslesen und dann jede IP-Adresse anpingen und schauen ob ein errorlevel übergeben wird.

SetLocal
Set Rechner=rechner.txt

for /f %%r in (%Rechner%) do (call :ping %%r)
goto :eof

:ping
Set rechner=%1
ping -n 1 %rechner%
if %errorlevel%==0 (goto :eof) else (goto :error)

:error
net send (Rechnername wo popup aufpoppen soll) Rechner %rechner% ist nicht erreichbar

:eof

Das script ist ungetestet, sollten fehler auftauchen, bischen ausprobieren und vll findest du den fehler ansonsten nochmal melden ;)

Gruß
Schlumpf
Member: donnerkai
donnerkai Nov 18, 2011 at 08:53:25 (UTC)
Goto Top
Also funktioniert nicht, liegt aber wahrscheinlich an mir.
Ich komme mit der Syntax nicht klar.

Also... line 2 - Du holst Dir die Rechner IP aus der Datei rechner.txt. Diese habe ich angelegt und zunächst mit einer IP Adresse bestückt
line 4 eine FOR Schleife mit der Du die unterschiedlichen IP durchtickerst
line 7 verstehe ich nicht. müsste es dazu nicht dann auch einen goto :ping geben?

wie erfolgt die Trennung der verschiedenen IP Adressen in der Textdatei? Einfach immer eine neue Zeile?

Ich habe momentan keine Funktion mit dem Skript und egal was ich für eine IP eintrage auch keinen Rückgabewert.

face-sad
Member: ITSchlumpf
ITSchlumpf Nov 18, 2011 at 09:16:19 (UTC)
Goto Top
Okay ich probier grad mal woran es liegt. Was für ein Betriebssystem nutzt du?

Gruß

[Edit] Zu deinen Fragen.

Zu der Schleife Line4 -> Der geht Zeile für Zeile die Variable Rechner durch und holt sich jedesmal die nächste IP-Adresse.
Line 7 -> Schau mal bei der Schleife. da habe ich ein "do call :ping %%r" mittels diesen befehls wird die subroutine ":ping" aufgerufen und der wert "%%r " wird mit übergeben.

SetLocal
Set "Rechner=rechner.txt"  

for /f %%r in (%Rechner%) do (call :ping %%r)
goto :eof

:ping
Set rechner=%1
ping -n 1 %rechner%

if %errorlevel%==0 (goto :eof) else (goto :error)

:error

net send rechnername aber nur wenn du xp nutzt da Win7 kein net send mehr hat

:eof

Also bei mir läuft das so durch. Falls es bei dir nicht geht, baue ein paar pausen an verschiedenen Stellen ein um zu sehen was für eine Meldung kommt bzw wo er stehen bleibt.

Gruß
Schlumpf

[/edit]
Member: potshock
potshock Nov 18, 2011 at 09:33:14 (UTC)
Goto Top
Hi donnerkai,

schau mal hier auf meiner kleinen Page:
http://www.tackys-support.de/xptips.htm#N4
Aber ab Vista gibt es kein net send mehr, da musst du dann msg verwenden.

Potshock
Member: donnerkai
donnerkai Nov 18, 2011 at 10:16:48 (UTC)
Goto Top
Ok, ich habe den Fehler gefunden. Er kann mir den net send Befehlt nicht schicken. Ich nutze allerdings XP und es sollte funktionieren.
Die Meldung sagt mir, dass mein Rechner nicht vorhanden sei oder die Verbindung getrennt sei.

Das Skript an sich arbeitet also gut.
Woran das mit meinem PC jetzt liegt weiss ich allerdings auch nicht.

msg funktioniert aus dem gleichen Grund nicht.
Member: potshock
potshock Nov 18, 2011 at 10:38:54 (UTC)
Goto Top
Hi donnerkai,

ist denn der Nachrichtendienst überhaupt gestartet?
Ab Sp3 glaube ich war der deaktiviert worden bzw. Tools wie Xp Antispy etc. schaltete diesen auch häufig ab.
Ist der Nachrichtendienst eventuel durch eine Firewall geblockt?

Potshock
Member: donnerkai
donnerkai Nov 18, 2011 at 10:49:33 (UTC)
Goto Top
Ok, ich habe es. Ich musste meinen Usernamen angeben und nicht den Rechnernamen. Dann funktioniert msg


Danke! Wunderbar gelöst face-smile
Member: ITSchlumpf
ITSchlumpf Nov 18, 2011 at 11:17:37 (UTC)
Goto Top
Bitte gerngeschehen face-smile Helfen ja gerne.

Gruß und schönes Wochenende

ITSchlumpf
Member: donnerkai
donnerkai Nov 18, 2011 at 11:29:27 (UTC)
Goto Top
Jetzt läuft es und schwupps habe ich schon neue Begehrlichkeiten face-smile

Ich möchte gerne, dass die Datei immer wieder neu durchläuft. Das Skript habe ich entsprechend geändert. Geht das so:

SetLocal
Set Rechner=rechner.txt
:start
for /f %%r in (%Rechner%) do (call :ping %%r)
goto :eof
:ping
Set rechner=%1
ping -n 1 %rechner%
if %errorlevel%==0 (goto :start) else (goto :error)
:error
msg %username% Rechner %rechner% ist nicht erreichbar


Wie kann ich feststellen ob es noch läuft und vor allem wie kann ich es wieder beenden?
Ich möchte die Datei gerne auch an Kollegen weitergeben und habe deshalb den Usernamen als Variablenabfrage hinterlegt.

Kann ich das noch mit Batch lösen oder muss ich da schon auf eine Programmiersprache umsteigen ?
:eof
Member: ITSchlumpf
ITSchlumpf Nov 18, 2011 at 11:38:02 (UTC)
Goto Top
Benutze bitte wenn du Code hier reinschreibst die Textformatierung <.code><./code> (ohne Punkt) face-wink

Richte dir doch einfach nen Task ein der alle x Minuten die batch aufruft und laufen lässt. Ansonsten musst ne endlosschleife bauen.

:set
SetLocal
Set Rechner=rechner.txt
:start
for /f %%r in (%Rechner%) do (call :ping %%r)
goto :set
:ping
Set rechner=%1
ping -n 1 %rechner%
if %errorlevel%==0 (goto :start) else (goto :error)
:error
msg %username% Rechner %rechner% ist nicht erreichbar 
:eof

Ungetest

Zum beenden gehst halt in das Batchfenster und drückst STRG-C dann bricht er ab.
Das könntest du dir aber eben mittels Taskplaner ersparen, da dieser sobald der PC aus ist ja nicht mehr läuft.

Gruß
Schlumpf
Member: donnerkai
donnerkai Nov 18, 2011 at 11:56:46 (UTC)
Goto Top
Also ich hätte es ja gerne so, dass nur die Fehlermeldung sichtbar ist und der Rest unsichtbar läuft. Somit könnte ich ja dann auch nicht mehr ins Batch Fenster und STRG + C geht auch nicht.
face-sad

ich nerve schon, gell?
Member: ITSchlumpf
ITSchlumpf Nov 18, 2011 at 12:03:01 (UTC)
Goto Top
Nö nervst nicht ^^
Wenn du es so haben willst, dann lege dir im Taskplaner einen Task an, weil der startet die Batch ohne das du es siehst und dann bekommst du immer nur die Fehlermeldungen.
Stoppen kannst du die Batch dann über Taskplaner -> task stoppen.
Die Batch händisch starten und dann silent weiter laufen lassen, habe ich keine Ahnung wie das geht sry.

Gruß