PowerShell - 參照清單快速 Ping 特定的 Windows 主機



前言

最近有個需求,需要快速依照主機清單快速執行 Ping 的動作之外,希望了解 Ping 的結果是否成功或失敗,並且 RTT (Round Trip Time) 時間為多少 ms,所以這篇筆記便出現了。



一塊小蛋糕?

原本以為這應該是一塊小蛋糕的需求,只要寫個迴圈加載入主機清單的 Array 即可達成吧? 首先,採用 Test-NetConnection 搭配主機名稱,即可得到我想要的結果,包含 Ping 的結果是否成功或失敗,並且 RTT (Round Trip Time) 時間為多少 ms。


然而,因為預設顯示的欄位有些我並不需要,所以透過 Format-Table 來選取想要呈現的欄位。但是,卻發現 PingReplyDetails (RTT) 的欄位值無法顯示? 查詢後發現,該欄位是屬於 PingReply 類別的 PingReply.RoundtripTime 屬性,所以無法直接顯示。


那麼該如何單獨且正確的顯示? 簡單來說,抓取 PingReply.RoundtripTime 屬性數值並加上 ms 字串後顯示,但是目前的數值結果會是預設的「左邊」,屆時搭配 Format-Table 時會加上「align="right"」讓數值靠右呈現。


執行時,先檢查主機名稱是否存在,當主機名稱存在時以「綠色」字體顯示主機存在「host exists try to ping!」,並且透過 Test-NetConnection 搭配主機名稱執行 Ping 的動作,倘若主機名稱不存在時,則以「紅色」字體顯示「name resolution failed!」。




Ping_Hosts.ps1