mhuelse
Goto Top

Ping Statistik in ein Logfile wegschreiben

Mittels eines scriptes soll ein Pingstatistik erzeugt werden und zwar so, das alle nummerischen Ausgaben des pings in eine Logdatei via tabstop wegeschrieben werden.

Hier ist mein bisheriges script, was leider nicht ganz vollständig ist da es erstens, nicht alle Werte enthält und zweitens, die die es enthält noch mit Einheiten (ms) behaftet sind. Weiterhin erzeugt es ein CR/LF am ende einer jeden Zeile im Logfile was unschön ist.

/*my script*/
SET /P count=wie oft?
SET /P braek=pause?
SET /P ipadr=ipadr?
:Again
for /f "tokens=1,3,6,9 Delims=, " %%i IN ('ping %ipadr% -n 8^|find "Minimum"') do @echo %time% %%j %%k %%l >>C:\TEMP\ping.log
wait %pause%
set /a count=count-1
cls
echo %count%
IF %count% GTR 0 Goto Again:
/*my srcript end*/


Perfekt wäre es, wenn es in der Form ein Logfile kreieren würde, Beispiel;

Time stamp_tab_IP-Adr_tab_Bytes_tab_Zeit_tab_TTL_tab_gesendet_tab_empfangen_tab_verloren_tab_Minimum_tab_Maximum_tab_Mittelwert
oder
2006.01.01_tab_00:00:00_tab_127.0.0.1_tab_32_tab_128_tab_8_tab_8_tab_0_tab_10_tab_30_tab_20
2006.01.01_tab_00:00:10_tab_127.0.0.1_tab_32_tab_128_tab_8_tab_8_tab_0_tab_20_tab_60_tab_40

Content-Key: 25022

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

Ausgedruckt am: 29.03.2024 um 10:03 Uhr

Mitglied: Tundra
Tundra 03.02.2006 um 08:16:32 Uhr
Goto Top
Hallo Matthias,

warum baust Du Dir nicht ein vbscript?
Du schreibst das Ping-Ergebnis in einer Temp-Datei und liest sie danach aus.
Anschließend schreibst die ausgelesenen Werte in ein Log-File.

Grüße
Guido
Mitglied: Tundra
Tundra 03.02.2006 um 08:59:40 Uhr
Goto Top
<pre>
'ping-Statistik
'03.02.2006/ge

Option Explicit

const C_Log = "c:\Log"
const C_IP = "10.49.166.194"
const C_Anzahl = "2" 'Wie oft soll der Ping wiederholt werden
const C_Pause = "2" 'Pause zwischen den Pings in Sek.

DIM O_File
DIM O_Shell
DIM O_Log
DIM L_Input
DIM G_Ping
DIM G_Anzahl
DIM G_ToDo

Set O_File = CreateObject("Scripting.FileSystemObject")
Set O_Shell = createObject("Wscript.Shell")
Set O_Log = O_File.OpenTextFile(C_Log & "\ping_" & C_IP & ".log",2,true)

call S_Run

'
'Starte das Hauptscript
sub S_Run
O_Log.writeline "Start am/um " & now
O_Log.writeline "IP-Adresse: " & C_IP
O_Log.writeline "Ping-Anzahl: " & C_Anzahl
O_Log.writeline " "
call S_Ping
O_Log.writeline " "
O_Log.writeline "Ende am/um " & now
end sub

'Ping den Rechner an
sub S_Ping
DIM O_StartTmp
DIM i
for i = 1 to C_Anzahl
Set O_StartTmp = O_File.OpenTextFile(C_Log & "\ping_" & C_IP & "_Start.tmp",2,true)
O_StartTmp.writeline time
Set O_StartTmp = nothing
O_Shell.run "cmd /c ping " & C_IP & " -n 1 > " & C_Log & "\ping_" & C_IP & "_" & i & ".tmp",0,true
O_Log.writeline i & ") " & vbTab & F_Ping(C_Log & "\ping_" & C_IP & "_" & i & ".tmp")
O_File.DeleteFile(C_Log & "\ping_" & C_IP & "_Start.tmp") 'löschen Zeitstempel
O_File.DeleteFile(C_Log & "\\ping_" & C_IP & "_" & i & ".tmp") 'lösche Pingwert
wscript.sleep C_Pause * 1000
Set O_StartTmp = nothing
Next
end sub

'Temp-Datei auswerten und Log-File bauen
function F_Ping(P_Datei)
DIM O_Zeit
DIM O_Input
DIM L_Zeit
DIM L_Zeile
DIM L_Split

Set O_Zeit = O_File.OpenTextFile(C_Log & "\ping_" & C_IP & "_Start.tmp",1,false)
L_Zeit = O_Zeit.Readline

set O_Input = O_File.OpenTextfile(P_Datei,1,false)
do until O_Input.AtEndOfstream
L_Zeile = O_Input.Readline
if instr(L_Zeile,"Pakete") > 0 then
L_Split = Split(L_Zeile,",")
F_Ping = L_Zeit & vbtab & "G " & right(L_Split(0),2) & " E " & right(L_Split(1),2) & " V " & mid(L_Split(2),12,3)
end if
loop
end function

</pre>

Grüße
Guido
Mitglied: mhuelse
mhuelse 03.02.2006 um 14:35:21 Uhr
Goto Top
Hallo Matthias,

warum baust Du Dir nicht ein vbscript?
Du schreibst das Ping-Ergebnis in einer
Temp-Datei und liest sie danach aus.
Anschließend schreibst die
ausgelesenen Werte in ein Log-File.

Grüße
Guido


An sich auch mein erster Gedanke gewesen, aber es sollte ja mal schnell gehen und da fiel mir noch die gute alte *.bat aus alten Tagen ein. In Google schnell nach den nötigen Befehlen bzw. deren Syntax gesucht und fix was gebastelt.

cio
Mathias
Mitglied: mhuelse
mhuelse 03.02.2006 um 14:37:12 Uhr
Goto Top
Danke für die schnelle Antwort und werde das script heute Abend mal testen. DANKE!

Mathias
Mitglied: Tundra
Tundra 03.02.2006 um 16:41:26 Uhr
Goto Top
Hi,

es kein Thema, es Deinen Wünschen weiter anzupassen.

Grüße
Guido
Mitglied: Biber
Biber 03.02.2006 um 17:27:09 Uhr
Goto Top
Moin mhuelse,

als Batchfile sähe es so aus:
::---snipp Dauerping.bat
::/*my script*/
@echo off & setlocal
SET /P "count=wie oft? "
::--- nicht verstanden SET /P "break=pause? "
SET /P "ipadr=ipadr? "
:Again
echo ...noch %count% Ping-Tests mit %ipadr%
Ping %ipadr% -n 8 >%temp%\thisping.log
for /F "delims==,( skip=2 tokens=2,4,6" %%i in ('find "Pakete" thisping.log') do Set "SEND_RECV_LOST=%%i %%j %%k"
for /F "delims==, skip=2 tokens=2,4,6" %%i in ('find "Minimum" thisping.log') do Set "MIN_MAX_AVG=%%i %%j %%k"
echo %date% %time% %ipadr% %SEND_RECV_LOST% %MIN_MAX_AVG% >>Dauerping.log
::--- nicht verstanden wait %pause%
set /a count=count-1
IF %count% GTR 0 Goto Again:
goto :eof
:: /*my srcript end*/
::--snapp Dauerping.bat

type Dauerping.log
03.02.2006 17:20:49,53 10.xxx.99.99 8 8 0 0ms 5ms 0ms
03.02.2006 17:20:57,95 10.xxx.99.99 8 8 0 0ms 5ms 0ms
03.02.2006 17:21:06,33 10.xxx.99.99 8 8 0 0ms 5ms 0ms

Die Syntax mit dem Befehl "wait %pause%" kenn ich nicht - ggf. entkommentieren.
Zwischen den parametern natürlich TABs eingeben, auch wenn hier nur Leerzeichen angezeigt werden.
HTH Biber
Mitglied: mhuelse
mhuelse 03.02.2006 um 22:10:18 Uhr
Goto Top
Das ist schon so wie ich es mir vorgestellt habe, allerdings will ich nur die nummerischen Werte der MIN, MAX und AVG, so zusagen ohne das ms hinten dran hängt.

Der Pause string soll eigentlich nur mit einem externen "wait.exe" Befehl eine defenierte Zeit abwarten und danach den nächsten Ping (-n 8 Block) absetzen. Das war in meinem Beispielscript leider noch mit der falschen variable definiert
Mitglied: Biber
Biber 03.02.2006 um 23:02:24 Uhr
Goto Top
::---snipp Dauerping.bat Vers. 0.02
::/*my script*/
@echo off & setlocal
SET /P "count=wie oft? "
SET /P "waitsecs=Wieviel Sek. Pause zwischen Pings? "
SET /P "ipadr=ipadr? "
:Again
echo ...noch %count% Ping-Tests mit %ipadr%
Ping %ipadr% -n 8 >%temp%\thisping.log
for /F "delims==,( skip=2 tokens=2,4,6" %%i in ('find "Pakete" thisping.log') do Set "SEND_RECV_LOST=%%i %%j %%k"
for /F "delims==, skip=2 tokens=2,4,6" %%i in ('find "Minimum" thisping.log') do Set "MIN_MAX_AVG=%%i %%j %%k"
Set "MIN_MAX_AVG=%MIN_MAX_AVG:ms=%"
echo %date% %time% %ipadr% %SEND_RECV_LOST% %MIN_MAX_AVG% >>Dauerping.log
wait %waitsecs%
set /a count=count-1
IF %count% GTR 0 Goto Again
goto :eof
:: /*my srcript end*/
::--snapp Dauerping.bat Vers.0.02

Falls Wait.exe nicht Sekunden erwartet, sondern Millisekunden, dann noch:
Set "/a waitsecs*=1000"
...einbauen nach dem Set /P waitsecs.

Gruß Biber
Mitglied: mhuelse
mhuelse 04.02.2006 um 13:06:52 Uhr
Goto Top
Super script, nur kannst du mir mal erklären wie das mit dem Set Befehl funktioniert, scheint mir derzeit noch unlogisch

"Set "MIN_MAX_AVG=%MIN_MAX_AVG:ms=%"

Grüße Mathias
Mitglied: Biber
Biber 04.02.2006 um 22:05:54 Uhr
Goto Top
Moin mhuelse,

das, was vielleicht auf den ersten Blick etwas verwirrend aussieht, ist der Wechseln/Ersetzen-Befehl des CMD-Interpreters.

Musst Du Dir langsam klarmachen: eine CMD/Batch-Variable wird immer eingeschlossen durch zwei Prozentzeichen. Beispiel
%MIN_MAX_AVG% ....hat den Wert "0ms 4ms 2ms"

Mit diesen Wert kann ich mit der Syntax
%MIN_MAX_AVG:StringAlt=StringNeu%
eine vorhandene "alte" Zeichenkette durch eine neue ersetzen.

Im konkreten Fall will ja alle Zeichenketten "ms" durch "(nichts)" ersetzen.
Deshalb: %MIN_MAX_AVG:ms=%
Und diesen Wert weise ich wieder der ursprünglichen Variablen zu.
Deshalb
Set MIN_MAX_AVG=%MIN_MAX_AVG:ms=% bzw.
Set "MIN_MAX_AVG=%MIN_MAX_AVG:ms=%"

Nichtsdestotrotz, das ist halt eine der möglichen Batchvarianten. Ebenso wäre aber auch Tundras VBSkript-Lösung geeignet, da steckt genauso Arbeit drin.

Schönes Wochenende
Biber
Mitglied: mhuelse
mhuelse 05.02.2006 um 00:02:40 Uhr
Goto Top
Danke für deine Erläuterung. Ihr habt's echt drauf, alle Achtung. Danke nochmal.

Das VB script ist auch nicht schlecht, nur wird es auf dem (Test-) Laptop nicht laufen, da dort keine VBS Umgebung vorhanden ist bzw. nicht gewünscht ist.

Ansonsten noch mal ne andere Frage; Kennt sich hier jemand mit REXX aus, speziel mit Datumsarithmetik?
Ich weis das gehört hier nicht wirklich rein, aber in den Kategorien hab ichs nicht gefunden.

Grüße Mathias
Mitglied: Biber
Biber 05.02.2006 um 13:53:44 Uhr
Goto Top
Moin Mathias,

Ansonsten noch mal ne andere Frage;
Neue Frage == Neuer Beitrag face-wink
Kennt sich hier jemand mit REXX aus, speziel mit Datumsarithmetik?
Das werden wir nur herausfinden, wenn Du eine Frage "REXX - Frage zur Datumsarithmetik" postest...

Hier in diesem Beitrag würde es jedenfalls untergehen.
Schönen Sonntag
Biber