mikefield
Goto Top

Ca. 200 Device per Ping abarbeiten und in eine Log-Datei schreiben

Hallo Zusammen,

wir müssen mehrere IP-Adressen abfragen und das Ergebnis protokollieren.

Die IP-Liste (ca. 200 Einträge) sieht wie folgt aus:

Type     Name              IP Address
AUDIX    france            10.200.199.40                           
AUDIX    intuity           10.200.96.80                            
IP       INDIA             10.181.130.5                            
IP       SYD_DCTR          10.180.15.87                            
IP       SYD_DCTR2         10.180.15.78                            
IP       EMMC              10.200.96.140                           
IP       NORTEL_ITALY      10.200.10.126                           
IP       SP_ESS_1          10.200.96.21                            
IP       SP_ESS_2          10.200.96.22                            
IP       UK_ESS_1          10.203.149.241                          
IP       UK_ESS_2          10.203.149.242                          
IP       clan02a05         10.200.251.11                           
IP       clan02b05         10.200.251.21                           

Es soll ein "normaler" Ping mit 4 Abfragen abgesetzt werden, das Ergebnis sollte wie folgt aussehen und in einer Datei gespeichert werden.
Datum			Zeit			Type	Name			IP-Address	     Ping1	Ping2	Ping3	Ping4
04.12.2010	19:35:48,43	IP	SP_ESS_1	10.200.96.21	<1ms	<1ms	<1ms	<1ms
04.12.2010	19:35:48,43	IP	SP_ESS_2	10.200.96.21	<1ms	<1ms	<1ms	<1ms
Ist das so per Batch umsetzbar? Ich habe schon im Forum gesucht, aber leider nichts passendes gefunden.


mf

PS: Mist, das falsche Unterforum, kann das bitte jemand nach Entwicklung -> Batch verschieben?
Kommentar vom Moderator Biber am 04.12.2010 um 23:45:40 Uhr
PS: Mist, das falsche Unterforum, kann das bitte jemand nach Entwicklung -> Batch verschieben?
Jepp - zum Beispiel der Beitragsersteller. Anmelden und auf "Editieren" des Beitrags klicken.
Danach lässt sich der Beitrag auch richtig hinschieben.
Aber ich kann das auch schnell machen.

Grüße
Biber

Content-ID: 156341

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

Ausgedruckt am: 23.11.2024 um 02:11 Uhr

bastla
bastla 04.12.2010 um 20:41:39 Uhr
Goto Top
Hallo Mikefield!

Ungetestet etwa so:
@echo off & setlocal enabledelayedexpansion
set "Liste=D:\IP-Liste.txt"  
set "Log=D:\Log.txt"  

>"%Log%" echo Datum			Zeit			Type	Name			IP-Address		Ping1	Ping2	Ping3	Ping4   
for /f "usebackq tokens=1-3" %%a in ("%Liste%") do (  
    set "Zeile=!date!			!time!			%%a	%%b			%%c		"  
    for /f "tokens=5" %%i in ('ping %%c^|findstr "TTL"') do for /f "delims=Zeit" %%t in ("%%i") do set "Zeile=!Zeile!	%%t"  
    >>"%Log%" echo !Zeile:<=^<!  
)
Grüße
bastla
Mikefield
Mikefield 05.12.2010 um 09:28:38 Uhr
Goto Top
Hallo Bastla!

Danke für die schnelle Hilfe, habe es getestet, bekomme aber bei 5 Testeinträgen in der IP-Liste 6 Fehlermeldungen:
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.

Habe hier Windows 7 32bit, falls das eine Rolle spielt.


mf.
bastla
bastla 05.12.2010 um 11:36:31 Uhr
Goto Top
Hallo Mikefield!

Wird vermutlich ein Sonderzeichen-Problem sein - es wäre daher sinnvoll (gewesen), die entsprechenden Einträge zu posten ...

Abgesehen davon kannst Du aus dem "echo off" in der ersten Zeile ein "echo on" machen und den Batch von der Kommandozeile starten - dann siehst Du, was abläuft.

Grüße
bastla
Mikefield
Mikefield 05.12.2010 um 11:59:52 Uhr
Goto Top
Hallo Bastla!

Ich vermute es liegt am Schluß an der Ausgabe oder an diesem set Zeile. Die Einzelschritte funktionieren.

F:\test>ping0

F:\test>set "Liste=F:\Test\nodes.txt"  

F:\test>set "Log=F:\Test\Ping.txt"  

F:\test>for /F "usebackq tokens=1-3" %a in ("F:\Test\nodes.txt") do (  
set "Zeile=!date!                       !time!                  %a      %b  
                %c              "  
 for /F "tokens=5" %i in ('ping %c|findstr "TTL"') do for /F "delims=Zeit" %t i  
 ("%i") do set "Zeile=!Zeile!   %t"  
 echo !Zeile: 1>>"F:\Test\Ping.txt" 0<<!  
)

F:\test>(
set "Zeile=!date!                       !time!                  Router  DSL2184  
                192.168.150.1           "  
 for /F "tokens=5" %i in ('ping 192.168.150.1|findstr "TTL"') do for /F "delims  
Zeit" %t in ("%i") do set "Zeile=!Zeile!        %t"  
 echo !Zeile: 1>>"F:\Test\Ping.txt" 0<<!  
)

F:\test>for /F "delims=Zeit" %t in ("Zeit<1ms") do set "Zeile=!Zeile!   %t"  

F:\test>set "Zeile=!Zeile!      <1ms"  

F:\test>for /F "delims=Zeit" %t in ("Zeit<1ms") do set "Zeile=!Zeile!   %t"  

F:\test>set "Zeile=!Zeile!      <1ms"  

F:\test>for /F "delims=Zeit" %t in ("Zeit<1ms") do set "Zeile=!Zeile!   %t"  

F:\test>set "Zeile=!Zeile!      <1ms"  

F:\test>for /F "delims=Zeit" %t in ("Zeit<1ms") do set "Zeile=!Zeile!   %t"  

F:\test>set "Zeile=!Zeile!      <1ms"  
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung
ist falsch.

F:\test>

mf
bastla
bastla 05.12.2010 um 17:14:57 Uhr
Goto Top
Hallo Mikefield!

Wenn Deine "Nodes.txt" auch eine Zeile mit den Spaltenüberschriften enthält (ansonsten "skip=1" weg lassen), sollte das dann etwa so klappen (die Anzahl der enthaltenen TAB musst Du ev noch etwas anpassen):
@echo off & setlocal enabledelayedexpansion
set "Liste=F:\Test\nodes.txt"  
set "Log=F:\Test\Ping.txt"  

>"%Log%" echo Datum			Zeit			Type	Name		IP-Address		Ping1	Ping2	Ping3	Ping4  
for /f "usebackq skip=1 tokens=1-3" %%a in ("%Liste%") do (  
    set "Zeile=!date!		!time!		%%a		%%b		%%c"  
    for /f "tokens=5" %%i in ('ping %%c^|findstr "TTL"') do for /f "delims=Zeit" %%t in ("%%i") do set "Zeile=!Zeile!	%%t"  
    >>"%Log%" echo !Zeile!  
)
Grüße
bastla
Mikefield
Mikefield 05.12.2010 um 18:53:50 Uhr
Goto Top
Hallo Bastla!

Super, es funktioniert! Das mit den TABS werde ich dann noch korrigieren.
Macht es viel Aufwand noch eine Echo Ausgabe einzubauen, welches Device gerade verarbeitet, sprich angepingt wird?
Bei 200 Devices auf einen ewig blinkenden Kursor zu schauen fordert vie Geduld. face-smile

mf
bastla
bastla 05.12.2010 um 20:07:41 Uhr
Goto Top
Hallo Mikefield!

Einfach zwischen Zeile 7 und 8 etwas in der Art:
echo Verarbeite: %%b	%%c
Grüße
bastla
jeb-the-batcher
jeb-the-batcher 06.12.2010 um 00:19:55 Uhr
Goto Top
Hallo Mikefield,

statt 4*200 Sekunden zu warten, könnte man mehrere gleichzeitig abfragen.
Indem man "ping-tasks" startet und die Ausgabe in eine Datei Umleitet und dann analysiert.

Etwa sowas in der Art
@echo off 
setlocal enabledelayedexpansion
set "Liste=F:\Test\nodes.txt"  
set "Log=F:\Test\Ping.txt"  
>"%Log%" echo Datum			Zeit			Type	Name		IP-Address		Ping1	Ping2	Ping3	Ping4  

rem Pro Ping einen neuen Prozess asyncron im gleichen Fenster starten, ausgabe nach ping_IP.txt umleiten
for /f "usebackq skip=1 tokens=1-3" %%a in ("%Liste%") do (  
   start /b ping %%c > ping_%%c.txt
)

rem Abwarten, damit alle fertig sind
ping -n 5 localhost > nul 

rem Jetzt alle einlesen
for /f "usebackq skip=1 tokens=1-3" %%a in ("%Liste%") do (  
    set "Zeile=!date!		!time!		%%a		%%b		%%c"  
    for /f "tokens=5" %%i in ('type ping_%%c.txt^|findstr "TTL"') do for /f "delims=Zeit" %%t in ("%%i") do set "Zeile=!Zeile!	%%t"  
    >>"%Log%" echo !Zeile!  
)

Grüße
jeb
bastla
bastla 06.12.2010 um 00:27:03 Uhr
Goto Top
@jeb
Gute Idee face-smile
Frage am Rande: Welchen Vorteil hat
'type ping_%%c.txt^|findstr "TTL"'
gegenüber
'findstr "TTL" ping_%%c.txt'
?

Grüße
bastla
jeb-the-batcher
jeb-the-batcher 06.12.2010 um 11:30:06 Uhr
Goto Top
Zitat von @bastla:
@jeb
Gute Idee face-smile
Frage am Rande: Welchen Vorteil hat
'type ping_%%c.txt^|findstr "TTL"'
> 
gegenüber
'findstr "TTL" ping_%%c.txt'
> 
?

Grüße
bastla

Hallo bastla,

es gibt natürlich keinen Vorteil face-smile ich hab einfach den vorhanden Code möglichst wenig geändert.

Und außer bei Unicode/Codepage Problemen fällt mir auch kein Vorteil ein, bei dem ein type <file> [PIPE] besser wäre.

PS: Die Idee klappt auch, ich synchronisiere so immer mehrere Repositorys gleichzeitig, das spart deutlich Zeit

Gruß
jeb
Mikefield
Mikefield 07.12.2010 um 21:10:39 Uhr
Goto Top
Hallo Jeb! Danke für die Alternative! Inzwischen ist das nicht mehr so tragisch mit den 4x200 Sekunden.
Das Script läuft inzwischen per Scheduler auf einem Kundenrechner, so daß die Verzögerungen die durch
eine VPN entstehen vermieden werden.

Vielen Dank auch an Bastla für die Unterstützung am Sonntag!

mf