langer
Goto Top

Ping Antwort auswerten ?

Hallo,

habe einen W2k Server der z.B. alle 15 Minuten
3 Clients anpingen soll.
Kann man evtl. die Antwort (Zeitüberschreitung)
der pings in einer Batch auswerten ?

Zweck ist das der Server nicht mehr stur Zeitgesteuert runter fährt,
sondern nur dann wenn "keiner" der 3 Clients mehr läuft...

Geht da was per Batch, oder gibt's in dem Fall eine bessere Lösung ?


LG langer

Content-ID: 20291

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

Ausgedruckt am: 23.11.2024 um 05:11 Uhr

superboh
superboh 24.11.2005 um 08:25:23 Uhr
Goto Top
Hi,

ich hab mal hier mal ein Batch zusammengezimmert ...
Allerdings ist das so nicht ganz auf meinem eigenen Mist gewachsen. Und das ist auch der Grund dass die Batch etwas umständlich ist, aber ich bin mir sicher, unser Biber erklärt uns wie es besser geht (bei dem hab ich es auch geklaut: )
Du musst in der Batch noch die Rechnernamen oder IP-Adressen eingeben, die überwacht werden sollen. Und den Shutdown-Befehl. Das ganze dann als geplanten Task der alle 15 Minuten läuft ...

So, hier die Batch:
@echo off

set host1=Compi1
set host2=Compi2
set host3=Compi3

ping -n 1 %host1% >nul || goto AAA
goto online

:AAA
ping -n 1 %host2% >nul || goto BBB
goto online

:BBB
ping -n 1 %host3% >nul || goto CCC
goto online

:CCC
Echo Jetzt sind alle Rechner aus.
REM Hierhin sollte dann der Shutdown-Befehl
goto ende

:online
echo Mindesten ein Rechner ist noch an.

:ende
echo Ende des Scripts

Gruss,
Thomas
der-poet
der-poet 24.11.2005 um 08:33:41 Uhr
Goto Top
:online
echo Mindesten ein Rechner ist noch an.
goto ende

:ende
echo Ende des Scripts
REM Hierhin sollte dann der Shutdown-Befehl

ist es nicht gewollt das wenn einer online ist eben nicht der shutdownbefehl ausgeführt wird?
superboh
superboh 24.11.2005 um 08:51:28 Uhr
Goto Top
Ups, sorry, da bin ich verkommen ... ich ändere es oben ab face-smile
langer
langer 24.11.2005 um 19:40:44 Uhr
Goto Top
Hi,

der Batch läuft leider immer zum ":ende" egal wie die IP
antwortet.

Was läuft noch falsch ??

Grüße langer
Biber
Biber 24.11.2005 um 21:24:07 Uhr
Goto Top
Moin langer,
da muss ich superboh aber mal rettend zur Seite stehen - ich habe seinen Ansatz getestet und das läuft.
Ich habe das ein wenig zusammengedampft, weil ich bei langen Bätchen immer den Überblick verliere. face-wink

Aber die 3PingsTest.bat ist hoffentlich wiedererkennbar das obige Script.
Ich lasse das 2x durchlaufen - das erste Mal mit 3 Hosts, von denen einer (localhost) existiert.
Das zweite Mal mit drei Hosts, die wirklich nicht antworten.
::----snipp 3PingsTest.bat-------
@echo off & setlocal DisableDelayedExpansion
set "host1=gibtsnich" & set "host2=localhost" & set "host3=schongarnicht"  
:again
ping -n 1 %host1%>nul||ping -n 1 %host2%>nul||ping -n 1 %host3% >nul||goto ShutMeDown
(set host) & echo  ...............Mindestens ein Ping ok!
Set "Host2=firlefanz"  
goto :again
~~~
:ShutmeDown
(set host) & echo ...............Alle 3 OFFLINE! Mache jetzt shutdown........
goto :eof
::--------snapp 3PingsTest.bat
Output:
>e:\3PingsTest.bat
host1=gibtsnich
host2=localhost
host3=schongarnicht
 ...............Mindestens ein Ping ok!
host1=gibtsnich
host2=firlefanz
host3=schongarnicht
...............Alle 3 OFFLINE! Mache jetzt shutdown........
Anmerkung: das "setlocal DisableDelayedExpansion" muss ich auf MEINEM Rechner machen, weil bei mir "DelayedExpansion" enabled ist - und M$ mir sonst die Ausrufungszeichen verschluckt. Die Coden ja noch schlechter als ich... *gg

Das Script von Thomas macht also, was es soll.
Mögliche Fehlerquelle kann ja fast nur sein, dass Du ein Ping.exe-Utility auf dem Rechner hast, das zu blöd ist, bei Fehler ein Errorlevel zu setzen. Lach nicht - M$ hat so eins bei den ersten W2000-Versionen ausgeliefert.
Bitte prüfe das am CMD-Prompt:
ping -n 1 localhost >nul && @echo Online!

->wenn bei der zweiten Testzeile kein "OFFline" zurückkommt, nimm ein anderes Ping-Utility von echten Programmierern. Z.B."FreePing.exe".

::------3PingsMitODER.bat
@echo off & setlocal
set "host1=gibtsnich" & set "host2=localhost" & set "host3=schongarnicht"  
ping -n 1 %host1%>nul||ping -n 1 %host2%>nul||ping -n 1 %host3% >nul||goto ShutMeDown
goto :eof
:ShutmeDown
echo hier kommt das Shutdown-Command ...
::-----3PingsMitODER.bat
... und die übersichtlichste und einfachste ist natürlich mit UND-Verknüpfungen ("&&")
::-------3PingsMitUND.bat
@echo off & setlocal
set "host1=gibtsnich" & set "host2=localhost" & set "host3=schongarnicht"  
ping -n 1 %host1%>nul && goto :eof
ping -n 1 %host2%>nul && goto :eof
ping -n 1 %host3%>nul && goto :eof
echo hier kommt das Shutdown-Command ...
::-------3PingsMitUND.bat
HTH Biber
langer
langer 25.11.2005 um 09:53:42 Uhr
Goto Top
Hallo Biber,

habe deinen Test
Bitte prüfe das am CMD-Prompt:
ping -n 1 localhost >nul && @echo Online!
am W2k Rechner probiert.
Erfolgreich !

Die Batch von Thomas läuft an einem XP wunderbar,
so kopiert auf den W2K Rechner geht sie wieder "beim ersten IP"
unabhängig ob diese existiert oder nicht sofort zu "ende".

Geht so schnell, habe mal nach jedem
pause
goto online
pause eingefügt um das zu sehen.

Beim XP Rechner dauert die Abfrage jeder nicht existierende IP in der Batch
ein paar Sekunden, kann man zuschauen,
beim W2K geht's sofort durch ???

Habe auch schon probeweise die Ping.exe von XP auf den W2k kopiert.

Bin Ratlos....

Grüße langer
Biber
Biber 25.11.2005 um 11:25:52 Uhr
Goto Top
Moin langer,
bin auch im Moment ratlos. Sitze grad an einem XP-Prof-Rechner, aber an dem Code ist eigentlich ja nichts dabei, was unter W2K anders läuft IMHO *kopfkratz*

Hilft nichts - Kopier Dir Zeile für Zeile auf den CMD-Prompt und prüfe.
Rein bio-optisch durch das Draufschauen auf die paar Zeilen finde ich es auch nicht.

" (ODERs) zu klammern. Also "(ping -n 1 %host1% >nul)

Sorry, mehr seh ich grad nicht.
Bin gespannt auf diesen Fehler.
Biber
Biber
Biber 25.11.2005 um 13:08:54 Uhr
Goto Top
@langer
P.S. Auch, wenn es weit hergeholt ist: rufe mal bitte die W2K-Ping.exe mit Pfad-Angabe.
Also mit "...\Ping.exe ...parameters".
Nicht dass da aus Versehen eine "Ping.Bat" im W2K-Rechner-Pfad gefunden wird...

Merkwürdig...
langer
langer 25.11.2005 um 16:27:11 Uhr
Goto Top
Hi Biber,

habe deine Tipps probiert.
Hat sich leider nichts geändert, habe aber dadurch zufällig
bemerkt das mein kopieren der Ping.exe von XP auf
das W2k klammheimlich von dessen "Selbstschutz" wieder
zu nichte gemacht wird.
Man siehts am Datum das die alte Version immer wieder zurück kommt.

Hab jetzt mal die XP Ping.exe umbenannt ins W2k kopiert und die Aufrufe
in der Batch geändert.

Bekomme jetzt ne meckermeldung;

"Der Prozedureinsprungpunkt Set ThreadUILanguage wurde in der DLL Kernel32.dll nicht gefunden"

aber mit der IP Antwort kann die Batch jetzt trotzdem was anfangen !!!

Da liegt also das Problem,
wie du zuerst vermutet hast an der Ping.exe von W2k.
(Obwohl der aktuellste SP drauf ist.....)

Jetzt müßte also ein anderes Ping Utility her,
da sich W2k sträubt mit der XP Version zu arbeiten ???

Grüße langer
Biber
Biber 25.11.2005 um 16:50:03 Uhr
Goto Top
Moin langer,

zu M$ möchte ich mich jetzt nicht äußern...
Hier gibt es ein Ping-Konsolen-Utility: http://www.kwakkelflap.com/files/fping212.zip
Nennt sich FPing statt Ping und funktioniert. face-wink *winkz~~~ zu BillyBoy *

Schönes Wochenende & Nice Weekend To Redmond/Virginia
Biber
langer
langer 26.11.2005 um 02:22:52 Uhr
Goto Top
Hallo Biber,

hoffe ich treibe dich jetzt nicht in den Wahnsinn,
mit fping unter W2k das gleiche Problem.

Die ausgabe des Pings interessiert irgendwie nicht.
Nach dem ersten Ping (mit natürlich nicht existierender IP)
gehts nicht nach "goto AAA" sondern nur in die nächste Zeile
die nach goto online schickt.

Wie schaut's mit dem errorlevel der Pings aus, kann man das
irgendwie kontrollieren ?

Hier mal ein Beispiel, nur ob ich jetzt Syntaxblind geworden bin....

Die pause(n) und der Aufruf der calc.exe sind nur zum Test.
Habe aber auch deine und / oder Beispiele probiert.
Es bleibt die Reaktionslosigkeit der Geschichte ob eine IP existiert oder nicht ???


::@echo off

set host1=192.168.0.6
set host2=192.168.0.7
set host3=192.168.0.8

pause
goto online

:AAA
pause
goto online

:BBB
pause
goto online

:CCC
pause
echo Jetzt sind alle Rechner aus.

%SystemRoot%\System32\calc.exe
::C:\Anw-Tools\Fernsteuerung\Ruhe\ruhe.exe /A
goto ende

:online
@echo Mindesten ein Rechner ist noch an.

:ende
@echo Ende des Scripts


Hoffe das verdirbt jetzt nicht dein Wochenende face-wink

Grüße langer
superboh
superboh 26.11.2005 um 04:46:21 Uhr
Goto Top
Hi langer,

bei mir tun alle Varianten des Scripts sowohl unter WinXP als auch unter Win2000.

Was hast Du denn für ne Version von Ping.exe? Meine zeigt es mir als 5.0.2134.1 an.
Dateigrösse ist 17.168 Bytes und die Datei ist vom 10.12.99, 13:00 Uhr.

Gruss,
Thomas

Ach ja, noch was am Rande ... den Systemdateischutz kannst Du überlisten, wenn Du z.B. nach der Ping.exe suchst, dann beide markierst und beide gleichzeitig löscht. Danach einfach wieder in beide Verzeichnisse die neue kopieren.
langer
langer 26.11.2005 um 11:39:17 Uhr
Goto Top
Hallo Thomas, Biber,

Hab's geschafft.
Läuft jetzt mit fping und W2k.

habe diese Zeilen mal einzeln in eine Batch kopiert und laufen lassen,
da hat sich gezeigt das die Reihenfolge in der zweiten Zeile entscheidend ist ??

set host1=192.168.0.1


geht bei XP einwandfrei, bei W2k kommt die Meldung
"Host 192.168.0.1 ignored".
Deshalb wohl auch keine Unterscheidung möglich
ob IP vorhanden oder nicht.


W2k will die Reihenfolge so haben;

set host1=192.168.0.1


dann geht's.

Merkwürdiger Unterschied der zwei MS...

Dachte mir die Erklärung bin ich euch schuldig face-smile

Danke an euch, und ein entspanntes Wochenende.
Grüße langer
superboh
superboh 26.11.2005 um 12:10:17 Uhr
Goto Top
Hi langer,

freut mich zu hören dass es klappt.
Allerdings ist mir echt unklar, warum das bei Dir so rumzickt. Bei mir geht es doch ohne Änderung auch auf Win2000 und WinXP.

Naja, nicht fragen, nicht wundern, einfach akzeptieren face-smile

Gruss,
Thomas
Biber
Biber 27.11.2005 um 17:41:56 Uhr
Goto Top
Moin langer und Superboh,

dann will ich auch mal fair gegenüber M$ bleiben: Laut der Ping-Hilfe unter XP ("Ping /?") könnte man/frau es so auslegen, dass tatsächlich die Reihenfolge der Parameter keine Rolle spielt und der hostname nicht immer als Letztes, nach den optionalen Parametern genannt werden soll.
Also "ping [parameter] hostname" == "ping hostname [parameter]". ( bei XP++)
Und "ping [parameter] hostname" "ping hostname [parameter]". ( bei Win2K und kleiner)

Ist mir allerdings noch nie aufgefallen, dass M$ da bei W2k pingeliger ist als unter XP.
Ich werde es in eventuellen künftigen Beispielen dann auch in dieser "restriktiveren" W2k-Form mit "Hostname nicht als Letztes" schreiben. *Axelzuck* Glaube aber nicht, dass es Absicht von M$ war, eher normale Schlampigkeit.

Letzte Fussnote zum fehlenden/falschen Errorlevelwert bei Ping.exe von W2K:
Das Ping lässt sich natürlich trotzdem verwenden, wenn man/frau den Errorlevel "über Bande" holt. Ping liefert ja im Erfolgsfall einen Output mit dem String "Antwort von".. bei der deutschen bzw. "Reply from" bei der US-Version.
Somit lässt sich über [Ping hostname -n 1|find "Antwort von" >nul] ein Errorlevel von 0/OK oder 1/Fehler setzen. Nur für den Fall, dass kein FPing.exe zur Hand ist.
Schönen Rest-Sonntag Euch beiden
Biber