Wie erkenne ich, wenn ein Ping verloren gegangen ist oder nicht beantwortet wurde?

Wie erkenne ich, wenn ein Ping verloren gegangen ist oder nicht beantwortet wurde?

Wenn ich Windows-Updates installiere oder andere Wartungsarbeiten durchführe, die irgendwann einen oder mehrere automatische Neustarts erfordern, stehe ich seit Jahren immer wieder vor demselben Problem:

  1. Wie kann ich prüfen, ob die Netzwerkverbindung zu einem bestimmten Gerät unterbrochen wurde und wie kann ich dies mit Timecode protokollieren? Auch wenn die Unterbrechung nur wenige Sekunden gedauert hat, wie es häufig beim Neustart einer VM vorkommt.

  2. Wie kann ich ohne langes Suchen in Logfiles herausfinden, wann und wie lange die Netzwerkverbindungsunterbrechung (= Neustart) aufgetreten ist?

  3. Gibt es eine Möglichkeit, diese Herausforderung ohne spezielle Software zu lösen? Nur mit Windows-Tools wie PowerShell?

Antwort1

Normalerweise verwende ich dieses Skript, um das Hoch- und Herunterfahren eines oder mehrerer Computer zu beobachten.

# pinger.ps1

# example: pinger comp01
# pinger $list

param ($hostnames)

$pingcmd = 'test-connection'

$sleeptime = 1

$sawup = @{}
$sawdown = @{}

foreach ($hostname in $hostnames) { 
  $sawup[$hostname] = $false
  $sawdown[$hostname] = $false
}

while ($true) {
  foreach ($hostname in $hostnames) {
    if (& $pingcmd -count 1 $hostname -ea 0) {
      if (! $sawup[$hostname]) {
        echo "$([console]::beep(500,300))$hostname is up $(get-date)"
        $sawup[$hostname] = $true
        $sawdown[$hostname] = $false
      }
    } else {
      if (! $sawdown[$hostname]) {
        echo "$([console]::beep(500,300))$hostname is down $(get-date)"
date}
        $sawdown[$hostname] = $true
        $sawup[$hostname] = $false
      }
    }
  }
  sleep $sleeptime
}
pinger comp01,comp02

comp01 is up 12/02/2022 13:16:47
comp02 is up 12/02/2022 13:16:47

Antwort2

Lösung mit PowerShell und Windows 10 / Windows Server >= 2016:

  1. Pingen Sie den Host kontinuierlich an und schreiben Sie die AntwortmitTimecode in eine Textdatei (aber auch auf dem Bildschirm anzeigen). Sie können hier eine IP-Adresse oder einen Hostnamen verwenden:

    $computer = "192.168.1.29"; ping.exe -t $computer | Foreach{"{0} - {1}" -f (Get-Date),$_} | Tee "$env:userprofile\documents\Ping_$computer.txt" -append
    
  2. Öffne ein 2. PowerShell-Fenster und gib den folgenden Befehl ein. Dadurch wird die Textdatei aus PowerShell-Fenster #1 kontinuierlich überwacht und alle Zeilen ausgegeben, die NICHT die Zeichenfolge „Reply“ enthalten. Also alle Fälle, in denen der Ping nicht funktioniert hat.

    Get-content "$env:userprofile\documents\Ping_192.168.1.29.txt" -Tail 0 -Wait | where { $_ -NotMatch "Reply" }
    

verwandte Informationen