Cuando instalo actualizaciones de Windows o realizo otro mantenimiento que en algún momento implica uno o más reinicios automáticos, he tenido el mismo desafío una y otra vez durante años:
¿Cómo puedo verificar si se interrumpió la conexión de red a un dispositivo específico y cómo puedo registrar esto con código de tiempo? Incluso si la interrupción duró solo unos segundos, como es común al reiniciar una VM.
¿Cómo puedo saber cuándo y durante cuánto tiempo se produjo la interrupción de la conexión de red (= reinicio) sin una búsqueda prolongada en los archivos de registro?
¿Hay alguna manera de resolver este desafío sin un software especial? ¿Solo con herramientas de Windows como PowerShell?
Respuesta1
Normalmente uso este script para observar el funcionamiento de una o más computadoras.
# 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
Respuesta2
Solución con PowerShell y Windows 10 / Windows Server >= 2016:
Haga ping al host continuamente y escriba la respuestaconcódigo de tiempo a un archivo de texto (pero también mostrarlo en la pantalla). Puede utilizar una dirección IP o un nombre de host aquí:
$computer = "192.168.1.29"; ping.exe -t $computer | Foreach{"{0} - {1}" -f (Get-Date),$_} | Tee "$env:userprofile\documents\Ping_$computer.txt" -append
Abra una segunda ventana de PowerShell e ingrese el siguiente comando. Esto monitoreará continuamente el archivo de texto desde la ventana #1 de PowerShell y generará todas las líneas que NO contengan la cadena "Responder". Entonces, todos los momentos en los que el ping no funcionó.
Get-content "$env:userprofile\documents\Ping_192.168.1.29.txt" -Tail 0 -Wait | where { $_ -NotMatch "Reply" }