Jump to content

Dauer Ping aber nur Wechsel erkennen


Recommended Posts

Hallo alle zusammen,

 

Ich habe eine instablie Internetleitung und möchte den genauen Zeitpunkt heraus finden, wann dass die Leitung geht und wann nicht. Vermutlich hängt die Instabilität mit irgend einem Gerät im eigenen Stromnetz zusammen. Darum möchte ich mittels Ping ermitteln, wann das Internet geht und wann nicht. Aber nicht mit Ping /t weil sonst hätte ich millionen von Datenzeilen auszuwerten sondern mit einem kleinen Batch.
Habe mir das folgendermassen vorgestellt aber es hat vermutlich einen Fehler auf der Zeile nach  rem xy 

Jedenfalls wird das Kommandozeilenfenster an dieser Stelle ohne weitere Infos geschlossen...

Sieht jemand einfach so schnell auf Anhieb was ich falsch mache?

Vielen lieben Dank für Hinweise...

set vZielA=192.168.1.1
set vZielB=Switch.ch
set vLogA=PingCheckA.log
set vLogB=PingCheckB.log

set PingStatAWrite=0
set PingStatAWriteOnline=0
set PingStatAWriteOffline=0

:StartPing

ping  %vZielA% 
echo errorlevel ist: %errorlevel%

pause 
if errorlevel 1 (
pause 
	rem errorlevel ist 1 ping ist fehlgeschlagen.
	echo Das Ziel %vZielA% ist offline
    if %PingStatAWriteOffline%==0 (
		rem xy Fehler in Folgezeile?
		echo %vZielA% am %date% um %time% >> %PingCheckA%
        set PingStatAWriteOffline=1
		set PingStatAWriteOnline=0
pause
	) else (
		rem Log ist geschrieben, nichts ist zu tun.
	)
pause 
) else (
	rem errorlevel ist 0, Ping ist ok.
	echo Server %vZielA% ist online

    if %PingStatAWriteOnline%==0 (
		echo Online am %date% um %time% >> %PingCheckA%
        set PingStatAWriteOnline=1
		set PingStatAWriteOffline=0

	) else (
		rem Log ist geschrieben, nichts ist zu tun.
	)


)
timeout /T 10
goto StartPing

pause

 

Link to post

Hi,

 

und (ungetestet) auf die Schnelle in PowerShell:

$HosttoPing = "example.com"

$CurStatus = $true
$LastStatus = $null
$Date = Get-Date
Write-Output $("Start: {0} {1}" -f $Date.ToShortDateString(), $Date.ToShortTimeString())
do{
    $CurStatus = Test-Connection -ComputerName $HosttoPing -Count 1 -Quiet
    if($CurStatus -ne $LastStatus){
        $Date = Get-Date
        switch($CurStatus){
            $true{
                    Write-Output $("Internet: {0} {1}" -f $Date.ToShortDateString(), $Date.ToShortTimeString())
                    $LastStatus = $true
                }
            $false{
                    Write-Output $("Kein Internet: {0} {1}" -f $Date.ToShortDateString(), $Date.ToShortTimeString())
                    $LastStatus = $false
            }
        }
    }
}while($true)

Gruß

Jan

Link to post

Wow, suppper, Das Teil macht fast genau, was ich möchte... 
Habe nur eine Korrektur angebracht. Es soll zusätzlich auch in eine Datei schreiben. 
ABER 

Jetzt schreibt es nur den letzten Switch in die Datei, also überschreibt, anstatt anzufügen. Muss ich anstatt Out-File etwas anderes nehmen? Zeile 15 und 22...

 

# Original von NielsK
$HosttoPing = "example.com"

$CurStatus = $true
$LastStatus = $null
$Date = Get-Date
Write-Output $("Start: {0} {1}" -f $Date.ToShortDateString(), $Date.ToShortTimeString())
do{
    $CurStatus = Test-Connection -ComputerName $HosttoPing -Count 1 -Quiet
    if($CurStatus -ne $LastStatus){
        $Date = Get-Date
        switch($CurStatus){
            $true{
                    #Positiv Nachricht ausgeben an Screen und in Datei
                    Write-Output $("Internet-geht: {0} {1}" -f $Date.ToShortDateString() , $Date.ToShortTimeString())
                    $Date.ToShortDateString() + "-" + $Date.ToShortTimeString() + " Internet ist Ok!" | Out-File InternetStatus01.txt
                    $LastStatus = $true
                }
            $false{
                    #Negativ Nachricht ausgeben an Screen und in Datei
                    Write-Output $("Kein-Internet: {0} {1}" -f $Date.ToShortDateString() , $Date.ToShortTimeString())
                    $Date.ToShortDateString() + "-" + $Date.ToShortTimeString() + " Internet ist Fail!" | Out-File InternetStatus01.txt
                    $LastStatus = $false
            }
        }
    }
}while($true)

Viele dankende Grüsse

Markus

 

Oh, sorry, hab's gefunden, einfach -Append an die Zeile anhängen... und schon tut Dein Script ganz genau was ich will...

Also so: 

 

$Date.ToShortDateString() + "-" + $Date.ToShortTimeString() + " Internet ist Fail!" | Out-File InternetStatus01.txt -Append

 

Hab ganz vielen lieben Dank für dieses Script welches genau macht, was ich will...

Link to post

Moin,

 

ein wesentlicher Fehler in deinem ursprünglichen Code dürfte gewesen sein, dass %PingCheckA% keinen Wert hat. Damit verlangst du eine ungültige Dateioperation. Sowas passiert, wenn man Variablennamen nur an einer Stelle ändert ...

 

Gruß, Nils

 

Link to post

Guten Morgen Niels,

 

Vielen Dank für die Antwort zum Fehler in meinem Skript. Aber ich kippe dieses von mir geschriebene Skript eh in den Müll. Denn Deines mit dem Loop und dem Switch finde ich so viel besser und so viel besser lesbar, dass ich dankbarer weise Deines einsetze. Es zeigt mir auch sehr gut sowohl am Bildschirm als auch in der LogDatei an was Sache ist. Danke Dir vielmals für Dein Script.

Zudem habe ich gelernt wie man mit dem Editor eine ps1 Datei erstellt. Und das finde ich auch viel besser als die Kommandozeile mit dem NotePad...

Nur ein kitzekleiner Wunsch bin ich noch am recherchieren und habe noch nichts gefunden. 

Wie könnte ich innerhalb Deines Do...while eine Zeile einbauen, mit welcher ich immer nach 60 Minuten das ergebnis eines einzigen Ping in die Logdatei schreibe? 
Im Moment weiss man nicht, wenn das Script über 12 Stunden hinweg keinen Wechsel meldet, ob das Teil überhaupt noch am laufen ist. Es meldet sich im Moment ja nur dann, wenn der Zustand sich ändert. Darum wäre es cool, ich könnte eine Zeile mit einem einzigen Ping einbauen.

 

Viele Grüsse aus dem heute sonnigen Tessin

Markus

Link to post

Hallo Nobbyaushb, vielen Dank für Dein "Einwurf". Habe mir das auch lange überlegt. und vor vielen Jahren als ich noch in der Netzwerktechnik gearbeitet habe, hatte ich auch mal damit "gespielt". Für mein heutiges Projekt, denke ich, ist es eher ungünstig (Irrtum vorbehalten) Denn ein Notebook steht in einer Ferienwohnung und dort wird vermutet, dass die Internetanbindung wackelig ist. Ich möchte das Überwachen aber von einem anderen Standort aus, nämlich von mir zuhause. 

Mit dem phantastischen Skript von Niels (danke) schreibe ich ein Log nach OneDrive und kann das von zuhause aus abrufen...
Brauche keine Installation und nichts....

 

Wenn ich mich an damals richtig erinnere, ist PRTG ziemlich aufwändig von der Installation. Und ich erinnere mich nicht mehr, wie ich an die Daten komme, wenn ich hinter einer dynamischen IP stehe...

 

Besten Dank für Deine Hinweise.

 

Viele liebe Grüsse

Markus

Link to post

Moin,

 

das PowerShell-Skript ist nicht von mir. ;-) Die Grundidee hatte ich per Batch umgesetzt.

 

Ich bin mir nicht sicher, ob so ein Skript wirklich so dauerhaft laufen und seine Daten in ein OneDrive schreiben sollte. Gedacht ist der Ansatz für kurze Prüfungen. Aber für eine Zeit kann man das vielleicht auch durchgehend tun. Deine Zusatzanforderung würde ich einfach über einen Zähler abbilden. Momentan dürfte das Skript einmal pro Sekunde pingen. Man könnte also in jeder Ausführung einen Zähler um 1 hochsetzen und dann bei 3600 eine Statusmeldung ins Log schreiben und den Zähler zurücksetzen. 

 

Sofern die Auflösung des Skripts nicht sekündlich sein soll, wäre noch eine Wartezeit pro Durchlauf denkbar, dann müsste man natürlich den Zähler anpassen.

 

Gruß, Nils

 

Link to post

Da wird jemand fremdes einfach mit meinen Federn geschmückt. Tz.. ;-)

$HosttoPing = "example.com"
$LogPath = "InternetStatus01.txt"

$CurStatus = $true
$LastStatus = $null
$Date = Get-Date
$Heartbeat = $Date
Write-Output $("Start: {0} {1}" -f $Date.ToShortDateString(), $Date.ToShortTimeString())
Out-File -FilePath $LogPath -InputObject $("Start: {0} {1}" -f $Date.ToShortDateString(), $Date.ToShortTimeString()) -Append
do{
    $CurStatus = Test-Connection -ComputerName $HosttoPing -Count 1 -Quiet
    $Date = Get-Date
    if($CurStatus -ne $LastStatus -or $Date -ge $Heartbeat.Second(3600)){
        switch($CurStatus){
            $true{
                    Write-Output $("Internet: {0} {1}" -f $Date.ToShortDateString(), $Date.ToShortTimeString())
                    Out-File -FilePath $LogPath -InputObject $("Start: {0} {1}" -f $Date.ToShortDateString(), $Date.ToShortTimeString()) -Append
                    $LastStatus = $true
                }
            $false{
                    Write-Output $("Kein Internet: {0} {1}" -f $Date.ToShortDateString(), $Date.ToShortTimeString())
                    Out-File -FilePath $LogPath -InputObject $("Start: {0} {1}" -f $Date.ToShortDateString(), $Date.ToShortTimeString()) -Append
                    $LastStatus = $false
            }
        }
        $Heartbeat = $Date
    }
}while($true)

 

Link to post

Sorry TestPerson, es tut mir Leid, Ich war der festen Überzeugung, dass Nils der Autor war. Darum habe ich das auch in meinen Kopf rein geschrieben. Als Nils mir sagte, dass er nicht der Autor ist, habe ich es raus genommen. 

Ich habe noch ein paar Federn bei mir und ich würde gerne gut machen, was es noch gut zu machen gibt.
Darf ich rein schreiben:
*******************************

* Original Autor TestPerson *

*******************************

 

Ich möchte auf jeden fall, dass der rechtmässige Autor im Mindesten die Lorbeeren bekommt für dieses aus meiner Sicht für diesen Zweck geniale Script.

Herzlichste Grüsse 

Aus dem tiefsten Süden der Schweiz....

Gruss Markus

Edited by MaWiTi
Link to post
vor einer Stunde schrieb Sunny61:

Wenn schon korrigieren, dann ganz. Nils schreibt sich ohne e. ;)

Oh, mein Gott... wie peinlich... sorry... dabei meine ich es doch alles nur gut... 
kann das Universum mir eine Entschuldigung anbieten? Ich meine, immerhin ist heute Freitag der 13.   Da kann doch sowas vorkommen, oder?
Ok, hebe zweimal E gelöscht... Und zugegeben, der Spruch der am Schwabentor in Schaffhausen zu sehen ist, der stimmt wirklich...

Siehe unter http://www.hexerei.ch/tor/

  • Haha 3
Link to post

Guten Morgen Expert Member lefg, ich sehe schon, um Dich zu verstehen, da muss ich erst noch ein paar Jährchen in die Schule...  Dennoch vielen Dank für Deine Worte...
Smile, Niveau und schlagen mit Erfahrung... muss ich mir merken...
Und jetzt mach ich mir ein ProfilBild anstelle des M im Kreis... das ist ja kein hingucken...
Schönen Tag alle zusammen...

Edited by MaWiTi
Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...