![핑이 끊겼거나 응답이 없는 경우를 어떻게 알 수 있나요?](https://rvso.com/image/776305/%ED%95%91%EC%9D%B4%20%EB%81%8A%EA%B2%BC%EA%B1%B0%EB%82%98%20%EC%9D%91%EB%8B%B5%EC%9D%B4%20%EC%97%86%EB%8A%94%20%EA%B2%BD%EC%9A%B0%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%95%8C%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
Windows 업데이트를 설치하거나 특정 시점에 하나 이상의 자동 재부팅이 포함된 기타 유지 관리를 수행할 때 수년 동안 계속해서 동일한 문제를 겪었습니다.
특정 장치에 대한 네트워크 연결이 중단되었는지 어떻게 확인하고 이를 타임코드로 기록할 수 있습니까? VM을 재부팅할 때 흔히 발생하는 것처럼 중단이 몇 초만 지속되더라도 마찬가지입니다.
로그 파일을 오랫동안 검색하지 않고 네트워크 연결 중단(= 재부팅)이 언제, 얼마나 오랫동안 발생했는지 어떻게 알 수 있나요?
특별한 소프트웨어 없이 이 문제를 해결할 수 있는 방법이 있습니까? PowerShell과 같은 Windows 도구만 사용하나요?
답변1
나는 일반적으로 이 스크립트를 사용하여 하나 이상의 컴퓨터가 올라가고 내려가는 것을 지켜봅니다.
# 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
답변2
PowerShell 및 Windows 10/Windows Server >= 2016을 사용한 솔루션:
호스트를 지속적으로 ping하고 응답을 작성합니다.~와 함께타임코드를 텍스트 파일로 변환합니다(화면에도 표시함). 여기에서 IP 주소나 호스트 이름을 사용할 수 있습니다.
$computer = "192.168.1.29"; ping.exe -t $computer | Foreach{"{0} - {1}" -f (Get-Date),$_} | Tee "$env:userprofile\documents\Ping_$computer.txt" -append
두 번째 PowerShell 창을 열고 다음 명령을 입력합니다. 그러면 PowerShell 창 #1에서 텍스트 파일을 지속적으로 모니터링하고 "Reply" 문자열이 포함되지 않은 모든 줄을 출력합니다. 그래서 핑이 작동하지 않는 모든 시간.
Get-content "$env:userprofile\documents\Ping_192.168.1.29.txt" -Tail 0 -Wait | where { $_ -NotMatch "Reply" }