it-nuke
Goto Top

MS nicht angezeigt in Batch

Hab kurz ne Batch gebaut um mir hohe MS anzeigen zu lassen?
Weiß jemand warum in der folgenden Batch die MS nicht angezeigt werden?


Batch:

SET ip=1.1.1.1
SET log=servername.txt
SET error=ERRORservername.txt

:pong


goto pong

Content-ID: 280421

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

Ausgedruckt am: 06.11.2024 um 00:11 Uhr

Clijsters
Lösung Clijsters 17.08.2015 aktualisiert um 17:00:30 Uhr
Goto Top
Hallo IT-Nuke,

Eine Grußformel wirkt nett und motiviert, dir zu helfen.

Code-Tags wirken aufgeräumt Wenn das dort überhaupt realisierbar ist... und sind leicht leserlich.

Dein Script tut nichts.
Bitte poste dein komplettes Batch-Script, erläutere dein Problem und erkläre uns (zumind. mir), was MS sind.

Danke.

Beste Grüße
Dominique
Auch eine Abschiedsgrußformel kann Wunder wirken!

EDIT:
Hast du den Post gerade bearbeitet?
Ich sehe nun eine Sprungmarke und ein Ping.
IT-Nuke
IT-Nuke 17.08.2015 aktualisiert um 10:40:02 Uhr
Goto Top
Das ist die komplette Batch :$.

SET ip=1.1.1.1 --- Die IP die gepinged werden soll
SET log=servername.txt --- die Textdatei für die Pings die unter 100 MS benötigen (Millisekunden)
SET error=ERRORservername.txt --- Textdatei für alle Pings die über 100 MS benötigen


:pong

ping -n 101 %ip%|find "TTL=" && ECHO Problem _______ IP: %ip% hat benötigt MS: %MS% _______ am %date% _______ um %time% _______ nicht/schwer erreichbar >>%error% --- mit der Zeile schreibt er in die ERRORservername.txt alle Pings die länger als 100 MS benötigen

goto pong --- Endlosschleife


________________________________

Das ganze läuft glaubig nicht so wie ich mir das denke.
Er schreibt die IP das Datum und die Zeit in die TXT weil
die ja zu jeder Zeit vorhanden sind aber die MS bekomme ich nicht in die TXT.
chiefteddy
Lösung chiefteddy 17.08.2015 aktualisiert um 17:00:29 Uhr
Goto Top
Hallo,

die Variable %ip% hast Du in der Batch selber definiert und die Variablen %time% bzw. %date" sind im System definiert. Doch wo ist die Variable %MS% definiert??

Der Ausgabe-Befehl ECHO gibt die Variablen aus und da die Variable %MS% nicht definiert ist, wird sie auch nicht ausgegeben (dh. ihr Inhalt ist leer und damit wird "leer" ausgegeben).

Jürgen

PS: MS soll wohl Millisekunden (ms) heißen.
IT-Nuke
IT-Nuke 17.08.2015 aktualisiert um 12:25:39 Uhr
Goto Top
Wie bekomme ich am unkompliziertesten die MS Pingtimes in diese Gleichung? :3

Ja, MS soll Millisekunden heißen. Bei dem ersten Kommentar wo MS vorkommt habe ichs auch noch mal hinter geschrieben.
chiefteddy
Lösung chiefteddy 17.08.2015 aktualisiert um 17:00:27 Uhr
Goto Top
Hallo,

Du machst einen "Dauer-" Ping und leitest die gesamte Ausgabe in eine Datei um. face-wink

Was heiß "unkompliziert"? Die Frage ist doch, was willst Du mit dem Programm erreichen? Nur eine Art Protokollierung oder "Qualitäts-Management" der Verbindung mit entsprechender Alamierung? Für letzteres wäre wohl eher ein Management-Tool wie zB. Nagios Dein Freund.

Für ersteres wäre mein obiger Tipp völlig ausreichend.

Du kannst natürlich auch einen Einzel-Ping (in "Dauerschleife") auslösen, das Ergibnis in eine Datei umleiten und den Inhalt dieser Datei dann analysieren (Zeichenkette auseinandernehmen und auswerten). Im Ergebnis dessen (IF ... THEN ... ELSE) kannst Du mit ECHO entsprechende Ausgaben und Reaktionen auslösen.

Jürgen
IT-Nuke
IT-Nuke 17.08.2015 aktualisiert um 13:07:38 Uhr
Goto Top
Ziel:
Solange das Programm offen ist soll es eine IP pingen.
Die Ping Ergebnisse sollen in eine TXT geschrieben werden.
Zusätzlich sollen aber die Pings von über 100 MS in
eine andere TXT geschrieben werden.

Was den Vorteil hat das man dann alle größeren Latenz in einer Übersicht hat und
nicht extra rausfiltern muss.

PS. Nagios wäre dann ein bisschen tomuch. Die kleine Batch soll nur mal für ab und zu sein
nicht fürn eine dauerhaftes Monitoring.



z.B.

01. set ip=4.2.2.2
02. set logdatei=pingtest.txt

03. :start

04. echo off
05. set Erfolg=NEIN
06. for /f "tokens=7 delims==< " %%i in ('ping -n 1 %IP%^|findstr "TTL"') do set "Zeit= - %%i" && set "Erfolg=JA"
07. >>%logdatei% echo %IP% - %date%-%time% - %Erfolg%%Zeit%

08. goto start
IT-Nuke
IT-Nuke 17.08.2015 aktualisiert um 13:47:52 Uhr
Goto Top
Bei dem letzten Batch die ich gepostet habe ergibt sich aber folgendes Problem.

Batch:

01. set ip=4.2.2.2
02. set logdatei=pingtest.txt

03. :start

04. echo off
05. set Erfolg=NEIN
06. for /f "tokens=7 delims==< " %%i in ('ping -n 1 %IP%^|findstr "TTL"') do set "Zeit= - %%i" && set "Erfolg=JA"
07. >>%logdatei% echo %IP% - %date%-%time% - %Erfolg%%Zeit%

08. goto start


Ergebniss:


192.168.50.2 - 17.08.2015-13:14:23,57 - JA - 28ms
192.168.50.2 - 17.08.2015-13:14:23,64 - JA - 28ms
192.168.50.2 - 17.08.2015-13:14:23,72 - JA - 28ms
192.168.50.2 - 17.08.2015-13:14:23,79 - JA - 28ms
192.168.50.2 - 17.08.2015-13:14:23,86 - JA - 29ms
192.168.50.2 - 17.08.2015-13:14:23,94 - JA - 28ms
192.168.50.2 - 17.08.2015-13:14:24,00 - JA - 28ms
192.168.50.2 - 17.08.2015-13:14:24,06 - JA - 28ms
192.168.50.2 - 17.08.2015-13:14:24,14 - JA - 28ms
192.168.50.2 - 17.08.2015-13:14:24,20 - JA - 28ms
192.168.50.2 - 17.08.2015-13:14:28,24 - NEIN - 28ms
192.168.50.2 - 17.08.2015-13:14:28,30 - NEIN - 28ms
192.168.50.2 - 17.08.2015-13:14:28,35 - NEIN - 28ms
192.168.50.2 - 17.08.2015-13:14:28,40 - NEIN - 28ms
192.168.50.2 - 17.08.2015-13:14:28,45 - NEIN - 28ms
192.168.50.2 - 17.08.2015-13:14:28,49 - NEIN - 28ms
192.168.50.2 - 17.08.2015-13:14:28,54 - NEIN - 28ms
192.168.50.2 - 17.08.2015-13:14:28,59 - NEIN - 28ms
192.168.50.2 - 17.08.2015-13:14:28,62 - NEIN - 28ms


Wie kann er auf 28 ms kommen wenn er ihn nicht erreicht?
(Habe das Programm laufen lassen und im Prozess mal das Netzwerkkabel entfernt)

--> kann ich mich dann überhaupt auf die MS-Angaben verlassen woher holt er sich die? Wie kommt der bei NEIN auf 28 ms?
chiefteddy
Lösung chiefteddy 17.08.2015 aktualisiert um 17:00:21 Uhr
Goto Top
Hallo,

was steht denn in der Original-Antwort des Ping? Vielleicht wird der Variablen-Wert, wenn er in der Antwort nicht vorkommt, nicht aktualisiert.

Jürgen
IT-Nuke
IT-Nuke 17.08.2015 aktualisiert um 14:12:31 Uhr
Goto Top
Na was bei einer nicht vorhanden Netzwerkverbindung steht:

Zeitüberschreitung der Anforderung

ODER

Allgemeiner Fehler.

ODER

Antwort von (IP eigener Netzwerkkarte) : Zielhost nicht erreichbar.


also alle 3 Sachen kamen mehr oder weniger vor
Wenn du/ihr die Batch ausführt habt ihr dann das selbe Problem?
Kann man das ihrgentwo nachlesen ob er sich die Werte von vorher holt
weil ich es mir nicht vorstellen kann, denke mir eher das er garnichts schreibt bevor
er sich was falsches holt???
Clijsters
Lösung Clijsters 17.08.2015 aktualisiert um 17:00:19 Uhr
Goto Top
Wo ich das gerade so lese...

Könntest du vielleicht mit so etwas was anfangen?
https://github.com/Clijsters/PingUI
Ist sehr spartanisch gebaut; sollte einen Graphen zeichnen, der an Infos behält, was du haben möchtest.

Das Ding ist ewig alt, aber für meine damaligen Zwecke hat es mehr als gereicht.
Es ging darum, möglichst übersichtlich darzustellen, wann ein Host bzgl. Ping Time eventuell aus der Reihe tanzt.
IT-Nuke
IT-Nuke 17.08.2015 aktualisiert um 15:01:56 Uhr
Goto Top
Kannst du mir auch die Release Datei geben kann das Projekt nicht mit Visual Studio C# 2010 Express öffnen.
Oder muss ich die IP im Quellcode ändern?

...wobei die Batch ja fast funktioniert außer die MS bei Connection Problemen.
Clijsters
Lösung Clijsters 17.08.2015 aktualisiert um 17:00:10 Uhr
Goto Top
Die finde ich auf Anhieb nicht...
Vielleicht heute Nachmittag / Abend.
[...]Ist ja auch kein C# ;)

Klar, die MS-Variable musst du natürlich nach jeder Zuweisung wieder zurücksetzen. Sonst behält sie so lang den letzten Wert, bis sie einen neuen bekommt.
chiefteddy
Lösung chiefteddy 17.08.2015 aktualisiert um 17:00:09 Uhr
Goto Top
Hallo,

Du suchts mit Deiner Batch in einem String nach einem Wert, der dort nicht existiert. Dann willst Du mit diesem (leeren) Wert ein einer Ausgabedatei eine Variable überschreiben.

Was macht Windows in einer Batch-Datei, wenn Du eine Variable mit einem leeren Wert überschreibst?? Vielleicht bleibt der alte, vorhergehende Wert erhalten?!

Es wird sich nicht der alte Wert "geholt", er steht noch drin, da er mit "Nichts" überschrieben wurde.

Setze doch einfach mal die Variable "Zeit" am Beginn der Schleife auf "0".

Jürgen
IT-Nuke
IT-Nuke 17.08.2015 aktualisiert um 16:01:22 Uhr
Goto Top
Danke, hat mir geholfen das zu verstehen.
Batch funktioniert jetzt besser.

Frage: Du sagst ja das er den alten Wert nimmt weil er noch nicht mit neuem beschrieben wurde.
Ist es möglich das er den alten MS Wert nimmt z.B, 30 MS weil es jetzt zu einer Latenz von 200 MS kommt und
das System noch auf den neuen Wert wartet aber das Programm schon beim nächsten Schritt ist und 30 MS statt
200 MS schreibt. Ab welcher Latenz Wert kann das auftreten wenn es auftritt 300 MS, 400 MS, 500 MS, ... 9999 MS ?


Batch:

set ip=192.168.50.2

set logdatei=pingtest.txt

:start

echo off

set "Zeit= - Error"

set Erfolg=NEIN
for /f "tokens=7 delims==< " %%i in ('ping -n 1 %IP%^|findstr "TTL"') do set "Zeit= - %%i" && set "Erfolg=JA"
%logdatei% echo %IP% - %date%-%time% - %Erfolg%%Zeit%

goto start


PS. Gibt es eine IP im Netz mit starken Latenz-Schwankungen zum Test-Pingen.
Clijsters
Lösung Clijsters 17.08.2015 aktualisiert um 17:00:07 Uhr
Goto Top
Ist es möglich das er den alten MS Wert nimmt z.B, 30 MS weil es jetzt zu einer Latenz von 200 MS kommt und [...]
Nein.
Es ist eine sequenzielle Abfolge; sie wartet, bis eine Antwort kommt (oder eben keine)
IT-Nuke
IT-Nuke 17.08.2015 um 16:22:56 Uhr
Goto Top
Zitat von @Clijsters:

> Ist es möglich das er den alten MS Wert nimmt z.B, 30 MS weil es jetzt zu einer Latenz von 200 MS kommt und [...]
Nein.
Es ist eine sequenzielle Abfolge; sie wartet, bis eine Antwort kommt (oder eben keine)


Ab welcher Latenz ist : "(oder eben keine)"
Ab dem Ablauf von X Zeit muss das Programm ja sagen, nö ich warte nicht mehr.
chiefteddy
Lösung chiefteddy 17.08.2015 aktualisiert um 17:00:01 Uhr
Goto Top
Hallo,

Ab dem Ablauf von X Zeit muss das Programm ja sagen, nö ich warte nicht mehr.

Deine Batch? Nö! Wenn Du in einer Batch den Befehl PAUSE aufnimmst, wartet die Batch, bis jemand eine Taste drückt: 10s, 10min, 10h, 10d oder 10a (wenn nicht vorher jemand den Strom ausschaltet face-smile )

In Deinem Fall heißt das, dass die Batch wartet, bis das externe Programm ping.exe sich fertig meldet (dh. die Ausgabe des PING-Ergebnisses ist erfolgt) und dann macht die Batch mit dem nächsten Befehl weiter.

Jürgen
Clijsters
Lösung Clijsters 17.08.2015 aktualisiert um 17:00:05 Uhr
Goto Top
Das sagt dir Google und die Eingabe von
Ping /?
IT-Nuke
IT-Nuke 17.08.2015, aktualisiert am 18.08.2015 um 09:43:36 Uhr
Goto Top
Okey, anderes ab wann gibt der Ping-Befehl zurück das er "erfolgreich" unerfolgreich war,
also ab welcher Latenz gibt er zurück das Ziel nicht erreichbar ist.


Antwort von MS:

https://technet.microsoft.com/de-de/library/Cc732509%28v=WS.10%29.aspx?f ...

wartet standartmäßig 4000 MS also 4 Sekunden.


____________

Lasse das erst einmal in eine Datei laufen und schreibe mir dann noch mal mit c# etwas.

____________

Letzter Stand Batch:



:start

echo off


set Erfolg=NEIN
for /f "tokens=7 delims==< " %%i in ('ping -n 1 %IP%^|findstr "TTL"') do set "Zeit= - %%i" && set "Erfolg=JA"
%logdatei% echo %IP% - %date%-%time% - %Erfolg%%Zeit%

goto start