Views: 0
在日常的企業 IT 運維中,網路資訊的穩定度往往決定了企業內部系統與日常辦公的運作效率。身為專業的資訊服務夥伴,忠碁科技經常收到客戶詢問:當網路出現間歇性斷線或異常卡頓時,該如何第一時間精準抓出是哪一台設備或哪條外網線路出了問題?
為了協助客戶能夠自主且快速地進行網路健檢與故障排障,展現資訊管理的專業度,忠碁特別分享一款企業級的 PowerShell 即時網路品質監測腳本。這款腳本能同時監控多個重要節點(如外部 DNS、內部網閘道器、核心交換機等),不僅能在畫面上以高規格工整排版即時輸出數據,還能自動將斷線狀況精簡記錄成文字檔,非常適合作為企業長期掛網排查或 IT 品質稽核的工具。
為什麼用 PowerShell 網路監測腳本?
相較於傳統 CMD 檔案(Batch)容易受到 Windows 系統語系干擾,且無法精準獲取網路數據,忠碁科技工程師推薦改用微軟核心的 PowerShell(.ps1)環境,並呼叫底層的 .NET 網路元件進行 PING 檢測。這款優化後的腳本具備以下五大核心優勢:
- 多目標 IP 同時輪詢:可自行設定多個測試目標,各 IP 擁有獨立計數與狀態,互不干擾。
- 高強迫症工整排版:畫面採用欄位固定寬度格式化對齊,毫秒數個十百位垂直成直線,閱讀極度舒適。
- 防誤判緩衝機制:必須連續 2 次 PING 失敗才觸發斷線紀錄,完美排除網卡剛啟動或偶爾掉 1 包的誤報。
- 精簡 Log 自動換檔:每天自動依「月-日_IP.txt」換檔。持續斷線時若原因相同會省略重複寫入,保護硬碟空間。
- 微秒級別精準轉換:針對內網極速回應環境,自動將 0ms 轉換顯示為更能客觀呈現品質的 <1ms。
PowerShell 網路即時監測腳本程式碼
以下為完整的技術教學程式碼。貴公司的 IT 人員或管理工程師可以直接複製下方內容,並將其另存為 ping_monitor.ps1 檔案即可投入使用。若在部署過程中遇到任何網路規劃或資訊架構的疑問,歡迎隨時聯絡忠碁科技提供技術支援。
# ==================== 自訂設定區 ====================
# 填入您想要測試的多個 IP(用逗號隔開)
$TargetIPs = @("168.95.1.1", "192.168.6.1", "192.168.6.250")
$IntervalSeconds = 2
# ====================================================
# 初始化每個 IP 的狀態與計數
$IpStates = @{}
$FailCounts = @{}
$LastErrorMessages = @{}
foreach ($ip in $TargetIPs) {
$IpStates[$ip] = "online"
$FailCounts[$ip] = 0
$LastErrorMessages[$ip] = ""
}
# 建立 .NET Ping 物件
$PingProvider = New-Object System.Net.NetworkInformation.Ping
cls
Write-Host "=========================================================================" -ForegroundColor Cyan
Write-Host "【多目標群組 - 網路即時監測與連線品質評估】" -ForegroundColor Cyan
Write-Host "測試目標清單: `$($TargetIPs -join ', ')" -ForegroundColor Cyan
Write-Host "檢測間隔 : 每 `$IntervalSeconds 秒輪詢一次 | 超時設定: 1500ms" -ForegroundColor Cyan
Write-Host "=========================================================================" -ForegroundColor Cyan
while (`$true) {
`$DateStr = Get-Date -Format "MM-dd"
`$TimeStr = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
foreach (`$TargetIP in `$TargetIPs) {
`$LogFile = "`${DateStr}_`${TargetIP}.txt"
# 如果 Log 檔案不存在,寫入標頭
if (-not (Test-Path -Path `$LogFile)) {
`$HeaderContent = @"
======================================================================
【網路斷線監測與品質紀錄】
======================================================================
測試目標 IP : `$TargetIP
測試目的 : 檢驗本地端連往目標主機之穩定度與品質
品質判定標準 :
- 極佳 : 延遲 <= 10ms
- 良好 : 延遲 11ms - 29ms
- 普通/稍慢 : 延遲 30ms - 50ms
- 嚴重延遲 : 延遲 >= 51ms
- 斷線 : 連續 2 次 PING 失敗(單次超時 1500ms)觸發紀錄
開始記錄時間 : `$TimeStr
======================================================================
"@
`$HeaderContent | Out-File -FilePath `$LogFile -Encoding utf8
Write-Host "[`$TimeStr] [系統提示] 已建立 `$TargetIP 專屬紀錄檔: `$LogFile" -ForegroundColor Magenta
}
# 執行 PING 檢測
`$PingResult = `$null
`$IsSuccess = `$false
try {
`$PingResult = `$PingProvider.Send(`$TargetIP, 1500)
if (`$PingResult.Status -eq "Success") { `$IsSuccess = `$true }
} catch {
`$ExceptionMessage = `$_.Exception.Message
}
# 判斷 PING 結果與格式化排版
if (`$IsSuccess) {
`$RoundtripTime = `$PingResult.RoundtripTime
`$TTL = `$PingResult.Options.Ttl
# 品質評估邏輯
if (`$RoundtripTime -le 10) { `$QualityText = "極佳" }
elseif (`$RoundtripTime -le 29) { `$QualityText = "良好" }
elseif (`$RoundtripTime -le 50) { `$QualityText = "普通/稍慢" }
else { `$QualityText = "嚴重延遲" }
# 當時間為 0ms 時,轉換文字為 <1ms,其餘保持原樣並靠右對齊
`$TimeDisplay = if (`$RoundtripTime -eq 0) { "<1ms" } else { "`$RoundtripTime`ms" }
# 黃金排版:成功(時間欄位固定固定 5 個字元寬度,確保 <1ms 與 100ms 完美對齊)
`$ScreenMessage = "[{0}] {1,-15} | 成功 | 時間={2,5} | TTL={3,3} | 品質: {4}" -f `$TimeStr, `$TargetIP, `$TimeDisplay, `$TTL, `$QualityText
Write-Host `$ScreenMessage -ForegroundColor White
# 狀態恢復判定
if (`$IpStates[`$TargetIP] -eq "offline") {
`$LogContent = @"
========================================
[恢復時間] `$TimeStr 連線已恢復正常! (當前回應時間: `$TimeDisplay)
========================================
"@
`$LogContent | Out-File -FilePath `$LogFile -Append -Encoding utf8
`$LogNotice = "[{0}] {1,-15} | [LOG提示] 網路已恢復連線!已更新 {2}" -f `$TimeStr, `$TargetIP, `$LogFile
Write-Host `$LogNotice -ForegroundColor Cyan
}
`$FailCounts[`$TargetIP] = 0
`$IpStates[`$TargetIP] = "online"
`$LastErrorMessages[`$TargetIP] = ""
}
else {
`$FailCounts[`$TargetIP]++
`$QualityText = "斷線"
`$CurrentErrorMessage = ""
if (`$null -ne `$PingResult) {
`$CurrentErrorMessage = `$PingResult.Status.ToString()
} else {
`$CurrentErrorMessage = if (`$ExceptionMessage) { `$ExceptionMessage } else { "Unknown Network Error / Timeout" }
}
# 黃金排版:失敗(補齊長度,與上方成功欄位完美契合)
`$ScreenMessage = "[{0}] {1,-15} | 失敗 | 原因={2,-22} | 次數: {3,2} | 品質: {4}" -f `$TimeStr, `$TargetIP, `$CurrentErrorMessage, `$FailCounts[`$TargetIP], `$QualityText
Write-Host `$ScreenMessage -ForegroundColor Red
# 連續 2 次失敗觸發 Log 寫入
if (`$FailCounts[`$TargetIP] -ge 2) {
`$IpStates[`$TargetIP] = "offline"
if (`$CurrentErrorMessage -ne `$LastErrorMessages[`$TargetIP]) {
`$LogContent = @"
========================================
[斷線時間] `$TimeStr (連續第 `$(`$FailCounts[`$TargetIP]) 次失敗)
[詳細錯誤訊息]
`$CurrentErrorMessage
[品質評估] 網路中斷 (斷線)
========================================
"@
`$LogContent | Out-File -FilePath `$LogFile -Append -Encoding utf8
`$LogNotice = "[{0}] {1,-15} | [LOG提示] 失敗原因改變或首次斷線,已更新至 {2}" -f `$TimeStr, `$TargetIP, `$LogFile
Write-Host `$LogNotice -ForegroundColor DarkRed
`$LastErrorMessages[`$TargetIP] = `$CurrentErrorMessage
}
}
}
}
# 等待 2 秒重複執行
Start-Sleep -Seconds `$IntervalSeconds
}
如何執行此指令檔教學
為了確保腳本順利運作,請遵循以下由忠碁科技提供的標準操作步驟:
- 在電腦桌面上點擊右鍵,新建一個純文字檔案,並將其重新命名為
ping_monitor.ps1(請務必確認副檔名從.txt變更為.ps1)。 - 使用PS編輯器打開該檔案,將上方提供的程式碼完整複製並貼入,儲存後關閉。
- 由於 Windows 預設的安全性原則會阻止未簽署的腳本執行,請在 Windows 開始選單搜尋「PowerShell」,並以系統管理員身分執行開啟它。
- 在 PowerShell 視窗中輸入以下命令以解除權限限制,並輸入
Y答應變更:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser - 最後,直接將檔案拖曳進 PowerShell 視窗中按 Enter,或輸入檔案路徑即可開始執行監測。
結語:專業的資訊維護,交給最具實力的團隊
透過這款工具,企業的網路管理人員能夠在不用採購昂貴監控軟體的前提下,達到精準掌握多個主機與節點連線品質的目的。
網路環境的穩定度是企業數位轉型的基石。如果您所在的企業正面臨複雜的網路架構異常、嚴重的跨區斷線、或是需要全方位的資訊委外維護與資安規劃,忠碁科技隨時準備好為您量身打造最高效、最穩健的企業級維運方案。歡迎與我們聯繫!
Hello world! 哈囉!
【免責聲明】 AI-Assisted Content | 部分資料引用自網路、AI的文筆,以及作者的整理。
如有侵權、雷同或標註錯誤,敬請來信明告知,還原始末釐前因。一經確認即撤稿,守護清名謝君勉。
【請認明】🔗 chungg.com 才是官方唯一授權認證網域。
專業領航|知識技術無價 價值實踐|應用服務有價
本頁連結(239436):網路斷線自動排查 支援多目標 IP 與品質評估的 PowerShell 腳本
