![Wie erkenne ich, wenn ein Ping verloren gegangen ist oder nicht beantwortet wurde?](https://rvso.com/image/776305/Wie%20erkenne%20ich%2C%20wenn%20ein%20Ping%20verloren%20gegangen%20ist%20oder%20nicht%20beantwortet%20wurde%3F.png)
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:
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.
Wie kann ich ohne langes Suchen in Logfiles herausfinden, wann und wie lange die Netzwerkverbindungsunterbrechung (= Neustart) aufgetreten ist?
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:
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
Ö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" }