muckel1986
Goto Top

Netzwerküberwachung per Batch Script - Datei ab bestimmter größe Löschen?

Erstellung eines Batchscriptes zum ermitteln der Internetverfügbarkeit.

Guten Morgen zusammen,

habe von meine Ausbilder die Aufgabe bekommen ein kleines Batch Script zu schreiben, welches die Verbindung mit dem Internet dokumentiert. Sinn und Zweck ist es in einfacher Form nach zu weißen, wie verfügbar das Internet ist. Grund dafür ist, dass die betreuende IT-Firma es nicht hin bekommt, den synchronen DSL-Zugang über deren Server aufrecht zu erhalten. Da meine Abteilung leider nur die Ausbildungs-PCs betreut, ist das nicht unsere Aufgabe. Ein Ausbildungsbereich soll aber irgendwelche Sachen bei ebay versteigern und benötigt dem zufolge auch ein funktionierendes WAN.

Da die Rechner recht alt sind, sollte keine Software aufgespielt werden, die Ressourcen verbraucht. Daher kam die Aufforderung das ganze mit den Bord eigenen Mitteln zu lösen. Entstanden sind drei Dateien: aufruf.vbs , warten.vbs und ueberwachung.bat . Die erste Datei habe ich als Verknüpfung unter Autostart für alle Benutzer eingebunden, so dass sie automatisch startet. Die Datei ruft dann die ueberwachung.bat auf, in dem erstmal die warten.vbs eingebunden. Jene soll dafür sorgen, dass das Script nur jede Minute (wird noch angepasst) durchlaufen lassen soll.

Die ueberwachung.bat führt dann pings aus. Einen zu dem Internen Server, der für den Internetzugang verantwortlich ist, einen zu google.de und chip.de damit man zwei unterschiedliche Server hat, die i.d.R. "immer" verfügbar sind. Danach folgt noch das leeren des DNS-Chaches, damit man sicher gehen kann, dass es nicht am Client liegt. Aussehen tut das Script bis jetzt so:
@ECHO OFF
cd C:\
cd C:\ueberwachung
md C:\ueberwachung\ergebnis\
: anfang
wscript warten.vbs
echo. >> C:\ueberwachung\ergebnis\liste.txt
echo PING und TRACE Test vom %date% um %time% >> C:\ueberwachung\ergebnis\liste.txt
echo ------------------------------------------------------ >> C:\ueberwachung\ergebnis\liste.txt
echo. >> C:\ueberwachung\ergebnis\liste.txt
REM echo. >> C:\ueberwachung\ergebnis\liste.txt
REM PING zu der IP des "BBW Servers"  
ping 10.10.10.1 >> C:\ueberwachung\ergebnis\liste.txt
echo.  >> C:\ueberwachung\ergebnis\liste.txt
REM PING zu www.google.de
ping www.google.de >> C:\ueberwachung\ergebnis\liste.txt
echo. >> C:\ueberwachung\ergebnis\liste.txt
REM PING zu der festen IP von chip.de
ping www.chip.de >> C:\ueberwachung\ergebnis\liste.txt
echo. >> C:\ueberwachung\ergebnis\liste.txt
REM TRACERT zu www.google.de
tracert www.google.de >> C:\ueberwachung\ergebnis\liste.txt
echo. >> C:\ueberwachung\ergebnis\liste.txt
REM leeren des DNS-Caches um zu gefährleisten, dass es nicht am Client liegt
ipconfig /flushdns >> C:\ueberwachung\ergebnis\liste.txt
echo. >> C:\ueberwachung\ergebnis\liste.txt
echo Ende des Test. >> C:\ueberwachung\ergebnis\liste.txt
echo. >> C:\ueberwachung\ergebnis\liste.txt
echo ------------------------------------------------------ >> C:\ueberwachung\ergebnis\liste.txt
echo ------------------------------------------------------ >> C:\ueberwachung\ergebnis\liste.txt
cls
goto anfang

Problem ist nun, dass die Datei in der das Ergebnis geschrieben wird, unendlich groß wird. Daher möchte ich die Datei ab einer bestimmten Größe Löschen. Mein Ansatz dazu schaut so aus:
@ECHO OFF
cd C:\
cd C:\ueberwachung
md C:\ueberwachung\ergebnis\

set "Datei=C:\ueberwachung\ergebnis\liste.txt"   

wscript warten.vbs

: anfang
REM Groeße der txt einbeziehen
IF "%Datei%" == "10MB" GOTO loeschen else GOTO ueberwachung  

REM wenn groeßer
:loeschen
	DEL C:\ueberwachung\ergebnis\liste.txt
	GOTO WEITER

REM Das ist nicht mehr bestandteil des IF-Zweiges!
:WEITER
	echo Die Datei wurde am %date% neu angelegt, da sie zu groß wurde. >> C:\ueberwachung\ergebnis\liste.txt
	GOTO ueberwachung

:ueberwachung
echo. >> C:\ueberwachung\ergebnis\liste.txt
echo PING und TRACE Test vom %date% um %time% >> C:\ueberwachung\ergebnis\liste.txt
echo ------------------------------------------------------ >> C:\ueberwachung\ergebnis\liste.txt
echo. >> C:\ueberwachung\ergebnis\liste.txt
REM PING zu der IP des "BBW Servers"  
ping 10.10.10.1 >> C:\ueberwachung\ergebnis\liste.txt
echo.  >> C:\ueberwachung\ergebnis\liste.txt
REM PING zu www.google.de
ping www.google.de >> C:\ueberwachung\ergebnis\liste.txt
echo. >> C:\ueberwachung\ergebnis\liste.txt
REM PING zu der festen IP von google.com
ping www.google.com >> C:\ueberwachung\ergebnis\liste.txt
echo. >> C:\ueberwachung\ergebnis\liste.txt
REM TRACERT zu www.google.de
tracert www.google.de >> C:\ueberwachung\ergebnis\liste.txt
echo. >> C:\ueberwachung\ergebnis\liste.txt
REM leeren des DNS-Caches um zu gefährleisten, dass es nicht am Client liegt
ipconfig /flushdns >> C:\ueberwachung\ergebnis\liste.txt
echo. >> C:\ueberwachung\ergebnis\liste.txt
echo Ende des Test. >> C:\ueberwachung\ergebnis\liste.txt
echo. >> C:\ueberwachung\ergebnis\liste.txt
echo ------------------------------------------------------ >> C:\ueberwachung\ergebnis\liste.txt
echo ------------------------------------------------------ >> C:\ueberwachung\ergebnis\liste.txt
cls
goto anfang

Als erste habe ich die Datei bestimmt um die es geht. Dann wollte ich per "wenn dann sonst" sagen, dass wenn die Datei 10MB groß ist, dass sie dann gelöscht werden soll und ansonsten soll mit dem Script weiter gemacht werden. Doch das habe ich bis lang noch nicht hin bekommen und hoffe, dass ihr mir helfen könnt.
IF "%Datei%" == "10MB" GOTO loeschen else GOTO ueberwachung  

Ich denke mal, dass ich entweder mit Klammern arbeiten muss oder das Batch das else nicht kann. Mein Ausbilder meint aber, dass es das geben würde. Hoffe, dass ihr mir bei dem Problem helfen könnt.

Vielen Dank
Tobias

Content-ID: 125995

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

Ausgedruckt am: 22.11.2024 um 22:11 Uhr

slubitz76
slubitz76 29.09.2009 um 09:46:43 Uhr
Goto Top
Die ELSE-Klausel muss auf der Zeile mit dem Befehl nach dem IF stehen.
Zum Beispiel:

IF EXIST test.txt (
del test.txt
) ELSE (
echo test.txt fehlt
)
slubitz76
slubitz76 29.09.2009 um 09:49:34 Uhr
Goto Top
Oder du nimmst klammern:
IF EXIST test.txt (del test.txt) ELSE echo test.txt fehlt
Iwan
Iwan 29.09.2009 um 09:56:52 Uhr
Goto Top
guten morgen,

ich würde lediglich Fehler protokollieren und nicht jeden einzelnen Ping und Tracert, um die Datei klein zu halten
oder
man könnte einfach nur das Tracert protokollieren, da man dort auch sieht, wo es hakt, und das Ping ganz weglassen
slubitz76
slubitz76 29.09.2009 um 10:00:18 Uhr
Goto Top
Das wäre wohl die bessere Variante......
Muckel1986
Muckel1986 29.09.2009 um 10:02:26 Uhr
Goto Top
Danke für deine Hilfe slubitz76!

Also müsste es so funktionieren:
: anfang
REM Groeße der txt einbeziehen
IF %Datei% == "10MB" ( GOTO loeschen )  
	ELSE ( GOTO ueberwachung )

REM wenn groeßer
:loeschen
	DEL C:\ueberwachung\ergebnis\liste.txt
	GOTO WEITER

REM Das ist nicht mehr bestandteil des IF-Zweiges!
:WEITER
	echo Die Datei wurde am %date% neu angelegt, da sie zu groß wurde. >> C:\ueberwachung\ergebnis\liste.txt
	GOTO ueberwachung

Eine weitere Frage hätte ich auch noch. Wie berechnet das Windows ScriptingHost die Zeitangabe? In der warten.vbs habe ich ja eine Zeitangabe. Ist jene in Millisekunden? Denn ich würde jene gerne so einstellen, dass das Script alle fünf Minuten durchläuft.

Vielen Dank
Tobias
St-Andreas
St-Andreas 29.09.2009 um 10:15:50 Uhr
Goto Top
Ausserdem würde ich die Ausgabe in eine datei umlenken deren Bezeichnung das aktuelle Systemdatum wiedergibt. Damit erhält man mehrere kleine Dateien und eine bessere Übersicht, vor allem wenn nur Fehler protokolliert werden.
Muckel1986
Muckel1986 29.09.2009 um 10:19:45 Uhr
Goto Top
Hallo zusammen,

das Problem ist, dass ich nicht nur die Fehler oder positiven Pings gebrauchen kann. Denn der interne Server ist fast immer erreichbar, aber man kommt nicht raus. Hinzu habe ich fest gestellt, dass die Pings teilweise positiv sind, der trace aber abbricht. (Getestet habe ich das über einen anderen Zugang, der eine dauerhafte Verbindung hat - habe nebenbei gesurft und das Gateway hat auch keinen Fehler zurückgegeben.)
PING und TRACE Test vom 27.09.2009 um 19:41:45,00 
------------------------------------------------------ 

Ping wird ausgefhrt fr 10.10.10.1 mit 32 Bytes Daten:

Antwort von 192.168.33.1: Zielnetz nicht erreichbar.
Antwort von 192.168.33.1: Zielnetz nicht erreichbar.
Antwort von 192.168.33.1: Zielnetz nicht erreichbar.
Antwort von 192.168.33.1: Zielnetz nicht erreichbar.

Ping-Statistik fr 10.10.10.1:
    Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0 (0% Verlust),

Ping wird ausgefhrt fr www.l.google.com [74.125.43.99] mit 32 Bytes Daten:

Antwort von 74.125.43.99: Bytes=32 Zeit=95ms TTL=56
Antwort von 74.125.43.99: Bytes=32 Zeit=62ms TTL=56
Antwort von 74.125.43.99: Bytes=32 Zeit=68ms TTL=56
Antwort von 74.125.43.99: Bytes=32 Zeit=205ms TTL=56

Ping-Statistik fr 74.125.43.99:
    Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0 (0% Verlust),

Ca. Zeitangaben in Millisek.:
    Minimum = 62ms, Maximum = 205ms, Mittelwert = 107ms

Ping wird ausgefhrt fr www.l.google.com [74.125.39.106] mit 32 Bytes Daten:

Antwort von 74.125.39.106: Bytes=32 Zeit=135ms TTL=56
Antwort von 74.125.39.106: Bytes=32 Zeit=67ms TTL=56
Antwort von 74.125.39.106: Bytes=32 Zeit=151ms TTL=56
Antwort von 74.125.39.106: Bytes=32 Zeit=69ms TTL=56

Ping-Statistik fr 74.125.39.106:
    Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0 (0% Verlust),

Ca. Zeitangaben in Millisek.:
    Minimum = 67ms, Maximum = 151ms, Mittelwert = 105ms

Routenverfolgung zu www.l.google.com [74.125.43.99] ber maximal 30 Abschnitte:
  1    <1 ms     *       <1 ms  192.168.33.1 
  2  192.168.33.1  meldet: Zielhost nicht erreichbar.
Ablaufverfolgung beendet.

Windows-IP-Konfiguration
Der DNS-Aufl”sungscache wurde geleert.
 
Ende des Test. 
------------------------------------------------------ 
------------------------------------------------------ 

Das Script möchte ich später noch Filtern und in eine zweite *.txt erstellen, in der dann eine bessere Auflistung folgt. Nach folgendem Schema:
Datum Uhrzeit erfolgreich/nichterfolgreich
29.09.2009 - 10:05 - keine Verbindung möglich / Verbindung nicht möglich

Doch dazu komme ich, wenn das erste erstmal funktioniert. Habe hier auch schon mehrere Beispiele gelesen, aber mein Ausbilder wünscht erstmal nur die einfache Variante. Ich selbst nutze die Aufgabe dazu, um mich mit Netzwerken, Monitoring usw. auseinander zu setzten - denn die Ausbildung hier ist leider nicht so sehr gut, aber das ist ein Thema für sich.

Vielen Dank für eure Hilfe und Tipps
Tobias
Iwan
Iwan 29.09.2009 um 11:05:50 Uhr
Goto Top
dann kürz doch die Pinggeschichte einfach mal ab:
REM Es wird 1 Ping an 10.10.10.1 gesendet:
PING -n 1 10.10.10.1
REM Datum und Uhrzeit angepasst (dd.mm.yyyy hh:mm:ss):
FOR /f "delims=, tokens=1-4" %%a in ("%date%,%time%") do SET Uhrzeit=%%a %%b  
REM Bei Pingfehler wird dies protokolliert:
IF errorlevel 1 ECHO echo %Uhrzeit%: PING 10.10.10.1 fehlgeschlagen  >> C:\ueberwachung\ergebnis\liste.txt 
Muckel1986
Muckel1986 29.09.2009 um 23:23:59 Uhr
Goto Top
Guten Abend,

danke für deine Hilfe. Es hat sich heute Nachmittag herrausgestellt, dass unser Geschäftsführer mit der betreuenden IT-Firma am Donnerstag einen Termin hat. Von daher soll das Script morgen früh unbedingt laufen und die Fehler bzw. auch die Erfolgreiche Verbindung Protokolieren. Um die Lister übersichtlicher zu haben, möchte ich deinen Tipp gerne benutzen. Ich möchte nun zwei Dateien erstellen. Eine fehler.txt und eine erfolgreich.txt In die Dateien soll wie in deinem Beispiel bereits geschrieben das Datum stehen, die Zeit und dann die Fehler- oder Erfolgsmeldung.

Da ich leider nicht genau weiß, was deine For-Schleife macht, habe ich das Datum so geschrieben: %date:~0% und die Uhrzeit so: %time:~0,8% Habe das Datum und die Uhrzeit via echo Befehl in die txt schreiben lassen und es funktioniert. So steht es auch im wikibook. Probiert habe ich es so:
@ECHO OFF
cd C:\
cd C:\ueberwachung
md C:\ueberwachung\ergebnis\
:ueberwachung
REM Zeitverzoegertes wiederholen
wscript warten.vbs

REM Datum und Zeit in das Format xx.xx.xxxx xx:xx:xx einrichten
set datum=%date:~0%
set zeit=%time:~0,8% 

REM PING zu der IP des "BBW Servers"  
ping -n 1 10.10.10.1 >> C:\ueberwachung\ergebnis\ping.txt
	REM Errorlevel in eine Variable speichern
	set BBW=%errorlevel%

REM PING zu der IP des "www.google.de"  
ping -n 1 www.google.de >> C:\ueberwachung\ergebnis\ping.txt
	REM Errorlevel in eine Variable speichern
	set GOOGLE=%errorlevel%

REM PING zu der IP des "www.chip.de"  
ping -n 1 www.chip.de >> C:\ueberwachung\ergebnis\ping.txt
	REM Errorlevel in eine Variable speichern
	set CHIP=%errorlevel%

REM leeren des DNS-Caches um zu gefährleisten, dass es nicht am Client liegt
ipconfig /flushdns >> C:\ueberwachung\ergebnis\ping.txt

if "%BBW%" == 0 ( echo %datum% %zeit% BBW-Server erfolgreich >> C:\ueberwachung\ergebnis\erfolg.txt )  
	ELSE ( echo %datum% %zeit% BBW-Server fehlerhaft >> C:\ueberwachung\ergebnis\fehler.txt )

if "%GOOGLE%" == 0 ( echo %datum% %zeit% GOOGLE-Server erfolgreich >> C:\ueberwachung\ergebnis\erfolg.txt )  
	ELSE ( echo %datum% %zeit% GOOGLE-Server fehlerhaft >> C:\ueberwachung\ergebnis\fehler.txt )

if "%CHIP%" == 0 ( echo %datum% %zeit% CHIP-Server erfolgreich >> C:\ueberwachung\ergebnis\erfolg.txt )  
	ELSE ( echo %datum% %zeit% CHIP-Server fehlerhaft >> C:\ueberwachung\ergebnis\fehler.txt )

cls
goto ueberwachung

In der IF-Bedingung möchte ich halt halt unterbringen, dass einmal der Erfolg oder der MIsserfolg geloogt wird. Nach dem Grundsatz wenn dann sonst, den ja die meisten Programmier-/Scriptsprachen beherschen.

Die Hauptdatei in der "alles" steht wird schonmal erstellt. Der Inhalt schaut zurzeit so aus:
Ping wird ausgefhrt fr 10.10.10.1 mit 32 Bytes Daten:

Antwort von 192.168.33.1: Zielnetz nicht erreichbar.

Ping-Statistik fr 10.10.10.1:
    Pakete: Gesendet = 1, Empfangen = 1, Verloren = 0 (0% Verlust),


Ping wird ausgefhrt fr www.l.google.com [209.85.129.103] mit 32 Bytes Daten:

Antwort von 209.85.129.103: Bytes=32 Zeit=59ms TTL=56

Ping-Statistik fr 209.85.129.103:
    Pakete: Gesendet = 1, Empfangen = 1, Verloren = 0 (0% Verlust),

Ca. Zeitangaben in Millisek.:
    Minimum = 59ms, Maximum = 59ms, Mittelwert = 59ms

Ping wird ausgefhrt fr www.chip.de [212.162.62.43] mit 32 Bytes Daten:
Zeitberschreitung der Anforderung.

Ping-Statistik fr 212.162.62.43:
    Pakete: Gesendet = 1, Empfangen = 0, Verloren = 1 (100% Verlust),

Windows-IP-Konfiguration

Der DNS-Aufl”sungscache wurde geleert.

Auch wird eine fehler.txt erstellt, die aber leider keinen Inhalt hat.

Ich hoffe sehr, dass ihr mir helfen könnt.
Vielen Dank
Muckel
Iwan
Iwan 30.09.2009 um 08:38:14 Uhr
Goto Top
guten morgen,

habe es gerade mal getestet, Fehler korrigiert und etwas verbessert face-wink
@ECHO OFF
CD /D C:\ueberwachung
MD %CD%\ergebnis\
SET FileOK=%CD%\ergebnis\erfolg.txt
SET FileER=%CD%\ergebnis\fehler.txt
SET FilePI=%CD%\ergebnis\ping.txt

:ueberwachung
ECHO Zeitverzoegertes wiederholen
wscript warten.vbs

ECHO Datum und Zeit in das Format xx.xx.xxxx xx:xx:xx einrichten
SET datum=%date:~0%
SET zeit=%time:~0,8% 

ECHO PING zu der IP des "BBW Servers"  
PING -n 1 10.10.10.1 >> %FilePI%
REM Errorlevel in eine Variable speichern
SET BBW=%errorlevel%

ECHO PING zu der IP des "www.google.de"  
PING -n 1 www.google.de >> %FilePI%
REM Errorlevel in eine Variable speichern
SET GOOGLE=%errorlevel%

ECHO PING zu der IP des "www.chip.de"  
PING -n 1 www.chip.de >> %FilePI%
REM Errorlevel in eine Variable speichern
SET CHIP=%errorlevel%

REM leeren des DNS-Caches um zu gefährleisten, dass es nicht am Client liegt
ipconfig /flushdns >> %FilePI%

ECHO Fehlerauswertung
IF %BBW% == 0 ( echo %datum% %zeit% BBW-Server erfolgreich >> %FileOK% ) ELSE ( echo %datum% %zeit% BBW-Server fehlerhaft >> %FileER% )
IF %GOOGLE% == 0 ( echo %datum% %zeit% GOOGLE-Server erfolgreich >> %FileOK% ) ELSE ( echo %datum% %zeit% GOOGLE-Server fehlerhaft >> %FileER% )
IF %CHIP% == 0 ( echo %datum% %zeit% CHIP-Server erfolgreich >> %FileOK% ) ELSE ( echo %datum% %zeit% CHIP-Server fehlerhaft >> %FileER% )

cls
goto ueberwachung
bei mir funktioniert es ohne Probleme
Muckel1986
Muckel1986 30.09.2009 um 09:12:39 Uhr
Goto Top
Vielen lieben Dank! Es scheint zu funktionieren. Gleich gehe ich an das betreffende Netz und werde dann auch sehen, ob die erfolg.txt erstellt wird - bin aber zuversichtlich, dass es funktioniert. Wo genau nun mein Fehler war, weiß ich nicht so genau. Der unterschied ist "nur", dass Du für die Umlenkung in die Dateien eine Variable genutzt hast und ich direkt den Pfad geschrieben hatte.

Vielen Dank
Muckel

P.S. Beitrag Markiere ich nach dem letzten Test als gelöst und werde dann auch den Inhalt aller drei Dateien posten.
Iwan
Iwan 30.09.2009 um 09:59:35 Uhr
Goto Top
der Fehler lag darin, das du "" um die Variablen drum herum benutzt hast
das mit dem Setzen der Variablen für die Dateien ist quasi nur "Kosmetik"
Muckel1986
Muckel1986 30.09.2009 um 16:18:30 Uhr
Goto Top
Hallo - gestern Abend hatte ich es auch ohne die Anführungszeichen ausprobiert. Aber nun funktioniert es ja face-smile


back-to-topAufgabenstellung

Da es immer wieder Probleme mit dem Internet in dem Betrieb gibt, soll mit "Windows Bord Mitteln" eine dokumentation geführt werden, die aufschluss darüber gibt, wann das Internet verfügbar war und wann nicht.

back-to-topIst-Situation

Das Interne Netz ist ein Klass A Netz und die betreuende IT-Firma hat einen Server. Auf diesem Server (bzw. der dortigen Kerio Firewall) melden sich die Benutzer an und werden dann auf die Internetseite "Weitergeleitet".

Problem ist nun, dass man sich zwar sehr häufig anmelden kann, aber nicht in's world-wide-web kommt. Die Ping-Versuche haben ergeben, dass der interne Server erreichbar ist, Server im World-Wide-Web aber nicht. Und genau dieses Problem soll dokumentiert werden.

back-to-topÜberlegung zur lösung dieser Aufgabe

Unter MS Windows ist es möglich in der "Shell" einen Ping-Befehl ab zu senden. Die Test haben gezeigt, dass der interne Server fast immer erreichbar ist, aber Pings die nach außen gehen nicht. Dieses "Verhalten" nutze ich, um die erreichbarkeit und die nicht erreichbarkeit zu dokumentieren.

back-to-topUmsetzung

Die Umsetzung dieser Überlegung bezieht sich auf drei Dateien. Mit der ersten Datei wird das Script automatisiert aufgerufen. Die zweite Datei sorgt dafür, dass das Script in einem angegebenen Zeitinterwall wiederholt wird und die letzte Datei führt die ping's und die Protokollierung durch.

back-to-topdie erste Datei --> aufruf.vbs

Diese Datei dient dazu, dass das Script automatisch gestartet wird. Um dies umzusetzten muss man eine Verknüpfung zu der Datei für alle Benutzer im autostart Ordner anlegen. Am einfachsten geht dies über den Explorer (Windowstaste + E) in das Verzeichnis
C:\Dokumente und Einstellungen\All Users\Startmenü\Programme\Autostart
wechseln und dort eine Verknüpfung zu
C:\ueberwachung\aufruf.vbs
anlegen. Diese Verknüpfung wird dann bei jedem Windowsstart / jeder Anmeldung automatisch aufgerufen.

Die Datei als solches hat nicht viel Code und schaut so aus:
Set WshShell = WScript.CreateObject("WScript.Shell")  
WshShell.Run "ueberwachung.bat",0,True  

back-to-topdie zweite Datei --> warten.vbs

Sorgt dafür, dass das Script nach der angegebenen Zeit wiederholt wird. Für meine Aufgabe habe ich es auf eine Minute (60000 Millisekunden) gestellt.
REM Zeit für die Wiederholung in Milisekunden
wscript.sleep(60000)
REM Zeitangaben
REM eine Minute: 60000
REM halbe Minute: 30000
Wer sich nicht sicher ist, wie man Millisekunden in eine andere Zeit umrechnet, kann einen Generator auf der Internetseite ConwertAll.com benutzen.

back-to-topdie dritte Datei --> ueberwachung.bat

In dieser Datei befindet sich nun das eigentliche Script. Die Erklärung werde ich in die einzelnen Schritte gliedern und am Ende nochmal den ganze Code zur verfügung stellen.
back-to-topdefinieren der Variablen
@ECHO OFF 
CD /D C:\ueberwachung 
MD %CD%\ergebnis\ 
REM Definieren der Variablen
SET FileOK=%CD%\ergebnis\erfolg.txt 
SET FileER=%CD%\ergebnis\fehler.txt 
SET FilePI=%CD%\ergebnis\ping.txt 
REM Datum und Zeit in das Format tt.mm.jjjj hh:mm:ss einrichten 
SET datum=%date:~0% 
SET zeit=%time:~0,8%  

Am Anfang habe ich die "Statusmeldungen" ausgeschaltet, damit der Anwender kein cmd-Fenster sieht und nicht in seiner Arbeit gestört wird. Danach wechsel ich in das Verzeichnis, in dem sich die drei Dateien befinden. Der Schalter /D sorgt dafür, dass man ggf. auch auf das Laufwerk wechselt. Im Anschluss daran wird das Unterverzeichnis ergebnis erstellt, in dem später die Log-Dateien sein sollen.

Im zweiten Abschnitt des ersten Teils werden Variablen definiert, die später genutzt werden, um den Code abzukürzen. FileOK ist für die positiven Erfolgsmeldungen gedacht und bezieht sich auf die Datei erfolg.txt die wie die beiden anderen Dateien im Unterverzeichnis ergebnis erstellt wird. FileER ist für die fehlerhaften Meldungen gedacht und bezieht sich auf die Datei fehler.txt. Die Variable FilePI bezieht sich auf die Datei ping.txt in der für uns "Admins" die Ergebnisse der jeweiligen Pings und des DNS-Cache leerens zusehen sein sollen.

Als letztes wird die Ausgabe des Datums und der Uhrzeit in das Format tt.mm.jjjj bzw. hh:mm:ss angepasst.
back-to-topausführen der Arbeits-Befehle
:ueberwachung 
REM Zeitverzoegertes wiederholen 
wscript warten.vbs 

ECHO PING zu der IP des "Internen Servers" >> %FilePI%   
PING -n 1 10.10.10.1 >> %FilePI% 
REM Errorlevel in eine Variable speichern 
SET INTERN=%errorlevel% 

ECHO PING zu der IP des "www.google.de" >> %FilePI%   
PING -n 1 www.google.de >> %FilePI% 
REM Errorlevel in eine Variable speichern 
SET GOOGLE=%errorlevel% 

ECHO PING zu der IP des "www.chip.de" >> %FilePI%   
PING -n 1 www.chip.de >> %FilePI% 
REM Errorlevel in eine Variable speichern 
SET CHIP=%errorlevel% 

REM leeren des DNS-Caches um zu gefährleisten, dass es nicht am Client liegt 
ipconfig /flushdns >> %FilePI% 
Dieser Teil wird benötigt, um die eigentliche "Arbeit" durch zu führen. Dabei gibt es drei PING-Blöcke. Einen für den Internen-Server und zwei für die externen. Als letztes wird der DNS-Cache des Clients geleert um sicher zu stellen, dass es nicht der Client ist, der für den Fehler verantwortlich ist.

Der Schalter "/n 1" bei dem Ping-Befehl sorgt dafür, dass "nur" ein Ping-Paket gesendet wird.Im Anschluss an dem Ping wird eine Variable mit dem errorlevel des Ping belegt. Um die Variable sich sinnvoll zu merken habe ich ihr den Namen des jeweiligen Pings gegeben; also INTERN, GOOGLE und CHIP.

Hinter den jeweiligen Befehlen ist ein ">> %FilePI%" zu lesen. Das sorgt dafür, dass die Ausgabe des jeweiligen Befehls auch in eine Datei geschrieben wird. Die Variable wurde am Anfang des Scriptes definiert.
back-to-toploggen der Ergebnisse
REM Abschließen der Datei
ECHO. >> %FilePI%
ECHO ------------------------------------------------------------ >> %FilePI%
ECHO. >> %FilePI%
REM Fehlerauswertung 
IF %INTERN% == 0 ( echo %datum% %zeit% BBW-Server erfolgreich >> %FileOK% ) ELSE ( echo %datum% %zeit% BBW-Server fehlerhaft >> %FileER% ) 
IF %GOOGLE% == 0 ( echo %datum% %zeit% GOOGLE-Server erfolgreich >> %FileOK% ) ELSE ( echo %datum% %zeit% GOOGLE-Server fehlerhaft >> %FileER% ) 
IF %CHIP% == 0 ( echo %datum% %zeit% CHIP-Server erfolgreich >> %FileOK% ) ELSE ( echo %datum% %zeit% CHIP-Server fehlerhaft >> %FileER% ) 
cls 
goto ueberwachung
Am Anfang von diesem letzten Abschnitt schreibe ich eine Leerzeile, eine "Strichzeile" und wieder eine Leerzeile in die Datei, die die eigentliche Arbeit logged. Grund dafür ist, dass man eine bessere Übersicht in der Datei hat und das man weiß, wann der Durchlauf vorbei ist.

Danach folgen drei IF-Befehle, die entweder den Erfolgreichen Ping melden oder den Misserfolg. Das "Ergebnis" schreiben sie in die jeweilige Datei. Zu erst wird der Erfolgreiche Ping abgefragt und über die Variable "FileOK" in die Datei erfolg.txt mit dem Datum, der Uhrzeit und einem Text geschrieben. Trifft diese Bedingung nicht zu, so wird dann das ähnliche über die Variable "FileER" in die fehlet.txt geschrieben. Ebenfalls mit dem Datum und der Uhrzeit.

Danach wird mit cls die "Anzeige" geleert und mit "goto ueberwachung" geht man wieder zum Beginn der "Schleife".

back-to-topdie Log-Dateien

Um die Erfolge bzw. die Misserfolge zu dokumentieren habe ich mich zweier Dateien bedient. Einmal die fehler.txt und der erfolg.txt. In die beiden Dateien wird jeweils geschrieben, ob der Ping zu dem jeweiligen Ziel erfolgreich war oder nicht. Am Anfang der Zeile steht dort das Datum, gefolgt von der Uhrzeit und einer Meldung um welchen Ping es sich gehandelt hat. Eine Ausgabe kann dann zum Beispiel so aussiehen:
30.09.2009  11:12:14   Interner-Server erfolgreich   
30.09.2009  11:13:23   Interner-Server erfolgreich  
und für die fehler.txt schaut es dann so aus:
30.09.2009  11:12:14   Interner-Server nicht erfolgreich   
30.09.2009  11:13:23   Interner-Server nicht erfolgreich  
Natürlich tauchen da auch die anderen ping-Ziele auf.

back-to-topdie fertigen Dateien

back-to-topaufruf.vbs
Set WshShell = WScript.CreateObject("WScript.Shell")  
WshShell.Run "ueberwachung.bat",0,True  
back-to-topwarten.vbs
REM Zeit für die Wiederholung in Milisekunden
wscript.sleep(60000)
REM Zeitangaben
REM eine Minute: 60000
REM halbe Minute: 30000
back-to-topueberwachung.bat
@ECHO OFF 
CD /D C:\ueberwachung 
MD %CD%\ergebnis\ 
REM Definieren der Variablen
SET FileOK=%CD%\ergebnis\erfolg.txt 
SET FileER=%CD%\ergebnis\fehler.txt 
SET FilePI=%CD%\ergebnis\ping.txt 
REM Datum und Zeit in das Format tt.mm.jjjj hh:mm:ss einrichten 
SET datum=%date:~0% 
SET zeit=%time:~0,8%  
:ueberwachung 
REM Zeitverzoegertes wiederholen 
wscript warten.vbs 

ECHO PING zu der IP des "Internen Servers" >> %FilePI%   
PING -n 1 10.10.10.1 >> %FilePI% 
REM Errorlevel in eine Variable speichern 
SET INTERN=%errorlevel% 

ECHO PING zu der IP des "www.google.de" >> %FilePI%   
PING -n 1 www.google.de >> %FilePI% 
REM Errorlevel in eine Variable speichern 
SET GOOGLE=%errorlevel% 

ECHO PING zu der IP des "www.chip.de" >> %FilePI%   
PING -n 1 www.chip.de >> %FilePI% 
REM Errorlevel in eine Variable speichern 
SET CHIP=%errorlevel% 

REM leeren des DNS-Caches um zu gefährleisten, dass es nicht am Client liegt 
ipconfig /flushdns >> %FilePI% 

REM Abschließen der Datei
ECHO. >> %FilePI%
ECHO ------------------------------------------------------------ >> %FilePI%
ECHO. >> %FilePI%
REM Fehlerauswertung 
IF %INTERN% == 0 ( echo %datum% %zeit% BBW-Server erfolgreich >> %FileOK% ) ELSE ( echo %datum% %zeit% BBW-Server fehlerhaft >> %FileER% ) 
IF %GOOGLE% == 0 ( echo %datum% %zeit% GOOGLE-Server erfolgreich >> %FileOK% ) ELSE ( echo %datum% %zeit% GOOGLE-Server fehlerhaft >> %FileER% ) 
IF %CHIP% == 0 ( echo %datum% %zeit% CHIP-Server erfolgreich >> %FileOK% ) ELSE ( echo %datum% %zeit% CHIP-Server fehlerhaft >> %FileER% ) 
cls 
goto ueberwachung
back-to-topBeispiel der Log-Dateien
back-to-toperfolg.txt
30.09.2009  12:50:51   BBW-Server erfolgreich   
30.09.2009  12:52:31   BBW-Server erfolgreich   
30.09.2009  12:57:52   BBW-Server erfolgreich 
(Hier würden die beiden anderen Server auch auftauchen, wenn die Verbindung erfolgreich wäre.)
back-to-topfehler.txt
30.09.2009  12:59:37   BBW-Server fehlerhaft   
30.09.2009  12:59:37   GOOGLE-Server fehlerhaft   
30.09.2009  12:59:37   CHIP-Server fehlerhaft   
30.09.2009  13:01:18   BBW-Server fehlerhaft   
30.09.2009  13:01:18   GOOGLE-Server fehlerhaft   
30.09.2009  13:01:18   CHIP-Server fehlerhaft   
back-to-topping.txt
PING zu der IP des "BBW Servers"     
Ping wird ausgefhrt fr 10.10.10.1 mit 32 Bytes Daten:
Antwort von 10.10.10.1: Bytes=32 Zeit=2ms TTL=128
Ping-Statistik fr 10.10.10.1:
    Pakete: Gesendet = 1, Empfangen = 1, Verloren = 0 (0% Verlust),
Ca. Zeitangaben in Millisek.:
    Minimum = 2ms, Maximum = 2ms, Mittelwert = 2ms

PING zu der IP des "www.google.de"     
Ping www.l.google.com [209.85.129.104] mit 32 Bytes Daten:
Zeitberschreitung der Anforderung.
Ping-Statistik fr 209.85.129.104:
    Pakete: Gesendet = 1, Empfangen = 0, Verloren = 1 (100% Verlust),

PING zu der IP des "www.chip.de"     
Ping www.chip.de [212.162.62.43] mit 32 Bytes Daten:
Zeitberschreitung der Anforderung.
Ping-Statistik fr 212.162.62.43:
    Pakete: Gesendet = 1, Empfangen = 0, Verloren = 1 (100% Verlust),

Windows-IP-Konfiguration
Der DNS-Auflösungscache wurde geleert.
  
------------------------------------------------------------  
PING zu der IP des "BBW Servers"     
Ping wird ausgefhrt fr 10.10.10.1 mit 32 Bytes Daten:
Antwort von 10.10.10.1: Bytes=32 Zeit=2ms TTL=128
Ping-Statistik fr 10.10.10.1:
    Pakete: Gesendet = 1, Empfangen = 1, Verloren = 0 (0% Verlust),
Ca. Zeitangaben in Millisek.:
    Minimum = 2ms, Maximum = 2ms, Mittelwert = 2ms

PING zu der IP des "www.google.de"     
Ping www.l.google.com [209.85.129.104] mit 32 Bytes Daten:
Zeitberschreitung der Anforderung.
Ping-Statistik fr 209.85.129.104:
    Pakete: Gesendet = 1, Empfangen = 0, Verloren = 1 (100% Verlust),

PING zu der IP des "www.chip.de"     
Ping www.chip.de [212.162.62.43] mit 32 Bytes Daten:
Zeitberschreitung der Anforderung.
Ping-Statistik fr 212.162.62.43:
    Pakete: Gesendet = 1, Empfangen = 0, Verloren = 1 (100% Verlust),

Windows-IP-Konfiguration
Der DNS-Auflösungscache wurde geleert.
  
------------------------------------------------------------  

back-to-topein Fazit?!

Die Aufgabe von meine Ausbilder habe ich dank der Hilfe von Iwan gelöst. Für unser Problem im Berufsbildungswerk kann nun dokumentiert werden, wie die Verfügbarkeit des Internets ist. Die Auflistung in den Log-Dateien könnte noch passender gestaltet werden, da das Script aber heute unbedingt in den Einsatz gehen musste, werde ich das zu eine späteren Zeitpunkt machen.

Denn angedacht ist es, dass man die Logs in ein csv Format oder ähnliches ausgeben wird, damit man es später mit einem Tabellenkalkulationsprogramm (Excell, Calc) nutzen kann und dann zum Beispiel auch nach dem Server oder der Zeit sortieren kann.

Das fertige Script kann man auch noch übersichtlich in meinem kleinen Wiki lesen. Dort wird es heute Nachmittag/Abend (sofern ich keine ISDN-Verbindung mehr habe) auch ein Archiv geben, damit man sich das Script downloaden kann.

Vielen Dank für die Hilfe und viel Spaß mit dem fertigen Script
Muckel/Tobias