Batch Script zum anpingen mehrere IP Adressen!

HenrikS.

Newbie
Registriert
Okt. 2013
Beiträge
3
Guten Tag

Ich habe mir ein Script gebaut, mit dem ich diverse IP Adressen auf einmal anpingen kann... So das mir ausgegeben wird ob das Gerät hinter der IP on bzw. offline ist. Das Script habe ich als .bat Datei gespeichert, und sieht so aus:

Code:
@echo off
:ENDLOS
rem ##########################
ping /n 1 10.3.32.4 > nul
if errorlevel 1 goto nichtda1
echo "Gateway 				ONLINE!"
goto end1
:nichtda1
echo "Gateway 				NICHT ONLINE!"
:end1

rem ##########################
ping /n 1 10.3.32.240 > nul
if errorlevel 1 goto nichtda2
echo "Patchschrank			ONLINE!"
goto end2
:nichtda2
echo "Patchschrank			NICHT ONLINE!"
:end2

rem ##########################
ping /n 1 10.3.32.253 > nul
if errorlevel 1 goto nichtda3
echo "Terminalserver				ONLINE!"
goto end3
:nichtda3
echo "Terminalserver				NICHT ONLINE!"
:end3

und so weiter.....

Ausgegeben sieht das beim ausführen der Datei so aus:
für Forum script.jpg

Mein Problem ist jetzt aber das die IPs die ich oben benutzt habe gar nicht Online sind, also sprich wenn ich in "cmd" gehe und "ping 10.3.32.240" ausführe wird mir erzählt: Zielhost nicht erreichbar was auch völlig korrekt ist, weil dort nichts hinter hängt. Nur leider sagt mir das Script die 10.3.32.240 sei Online.

Was ich dann noch festgestellt habe, wenn ich in "cmd" gehe und sage: ping /n 1 10.3.32.240 bekomme ich auch ein ping zurück und er sagt das Gerät wäre Online. Also denke ich mir das es nur an dem /n 1 liegen kann. Das /n 1 war mir aber wichtig damit er nur einmal an das Gerät pingt und nicht 4 mal. Mit /n hat cmd gesagt kann ich die zu sendenden Echoaufforderungen bestimmen!

Hat irgendeiner eine Idee zur Lösung meines Problems? Vielen Dank schon ein mal!!
 
ui tolles Script, sowas wollte ich schon immer haben!!!!

Habs mir gleich kopiert und werde alles testen!

Keine Ahnung warum es bei Dir nicht geht, also es sieht gut aus eigentlich!

;-)

Habe schon ganz viele Batches für zig Sachen, aber an dieser Sache war ich noch nicht dran...

Ich hab sowas schonmal angefangen, vll. hilft Dir der Anfang schonmal, ich knabbere auch dran:

@echo off
cls
chcp 1252
:Again
PING 1.1.1.1 -n 1 -w 60000 >NUL
PING google.de -n 1 | find /i "bytes=" || goto Fail
goto Again
:Fail
bla bla
goto Again

das 1.1.1.1 ist nur damit der Parameter -w 60000 Verwendung findet...
wenn Google.de Bytes erfolgreich sind, passiert nichts und er macht weiter
und wenn Bytes leer ist also keine Verbindung, dann geht er zu Fail
 
Zuletzt bearbeitet:
ping /n 1 10.3.32.240 bekomme ich auch ein ping zurück und er sagt das Gerät wäre Online.
Da hakts... benutz vlt was anderes als Ping...
 
Hey Henrik! Ich habe fertig:

@echo off
cls
chcp 1252
echo .........................................................
:ENDLOS
rem ##########################
ping 192.168.0.100 /n 1 | find /i "bytes=" || goto nichtda1
echo "Router 1 - ONLINE!"
goto end1
:nichtda1
echo "Router 1 - NICHT ONLINE!"
:end1
echo .........................................................
rem ##########################
ping 192.168.0.101 /n 1 | find /i "bytes=" || goto nichtda2
echo "Router 2 - ONLINE!"
goto end2
:nichtda2
echo "Router 2 - NICHT ONLINE!"
:end2
echo .........................................................
rem ##########################
ping 192.168.0.102 /n 1 | find /i "bytes=" || goto nichtda3
if errorlevel 1 goto nichtda3
echo "Router 3 - ONLINE!"
goto end3
:nichtda3
echo "Router 3 - NICHT ONLINE!"
:end3
timeout /t 10
goto ENDLOS
 
iptest.bat

Code:
@ECHO OFF
setlocal enabledelayedexpansion
echo.
:IPTEST
CLS
echo ***********************************************
echo.
for /f %%i in (iptest.txt) do (
    for /f "tokens=1,2,3" %%x in ('ping -n 1 -a %%i ^&^& echo SERVER_IST_ONLINE') do (
        if %%x==SERVER_IST_ONLINE (set SERVER_STATUS=ONLINE) else (set SERVER_STATUS=OFFLINE)
    )
    echo %%i ist !SERVER_STATUS!
    echo.
)
echo ***********************************************
timeout 60
GOTO IPTEST

iptest.txt
Code:
173.194.69.94
127.0.0.1
98.98.2.255

Batchdatei:
Timeout 60 in Anzahl der Sekunden ändern, die gewartet werden soll.

Textdatei:
Beliebig viele IPs, jede jeweils in eine Zeile. Die Datei muss im gleichen Verzeichnis sein wie die Batchdatei, ansonsten in der Batchdatei den kompletten Pfad angeben.
 
Falls du die Powershell zur verfügung hast, dann würde ich diese verwenden.
Hier mal ein beispielscript von mir.

Code:
$ROUTERLIST = @{
"ROUTER 1" = "192.168.0.100";
"ROUTER 2" = "192.168.0.101";
"ROUTER 3" = "192.168.0.102"
}

write-output $ROUTERLIST 

foreach($ROUTER in $ROUTERLIST.GetEnumerator())
{
    if( Test-Connection $ROUTER.value -Quiet -Count 1)
    {
        write-output ($ROUTER.name + " is ONFLINE")
    }
    else
    {
        write-output ($ROUTER.name + " is OFFLINE")
    }
}

Dort kannst du in dem Hashtable Name und IP angeben. Das ganze ist damit einfach übersichtlicher wie ich finde.
 
Wenn ich Skripte für Windows schreiben müsste(und Perl nicht zur Verfügung habe) würde ich mittlerweile auf die PowerShell setzen. Zum einen da Dinge wie dieses Beispi eben deutlich besser lesbar und damit wartbar sind und zum anderen da man davon ausgehen kann das MS cmd jetzt langsam aus dem System nehmen wird. Auch nett ist das MS direkt einen Editor (ISE) mitliefert.
 
Super, damit konnte ich nun endlich das richtige Ergebnis erzielen. So wie ich mir das vorgestellt habe! Vielen Danke Martin_Germany :)

@Sturmel danke auch dir, die variante werde ich auch nochmal versuchen!

@Fonce Das mit PowerShell werde ich mir auch nochmal genauer angucken, eventuell entspricht das ja noch mehr meinen Vorstellungen. Auf dem ersten Blick sieht das schon deutlich übersichtlicher aus! Danke auch dafür :)

Lg Henrik
 
Zuletzt bearbeitet:
Zurück
Oben