在PowerShell Test-NetConnection
cmdlet出現之前,我們有許多不同的命令行工具可供我們選擇來解決各種網絡連接問題。
我們有ping來測試ICMP的回應;tracert來查看我們的封包可能被丟棄的位置;nslookup用於對我們的DNS伺服器進行DNS查詢;telnet用於檢查開放的TCP端口,還有其他各種實用工具。每項工作都有對應的工具。
隨著在Windows 8.1和Windows Server 2012 R2上引入的PowerShell v4,這種一個工具解決一個問題的方法已經過時。
讓我向您介紹這個新的全能Test-NetConnection
cmdlet。把PowerShell Test-NetConnection想像成ping、tracert、nslookup、telnet和其他一些工具的結合。
使用Test-NetConnection進行疑難排解
讓我們看看我們可以使用Powershell test-netconnection cmdlet做些什麼,以及在解決網絡連接問題時如何使用它。
為了演示這一點,我將使用PowerShell的Test-NetConnection
來排除一個常見的現實問題:“我無法訪問XYZ網站!”
大多數用戶不知道的是,要成功在瀏覽器中呈現一個網站本身就是一個驚人的成就,考慮到必須一起工作的多個組件的數量。最基本的過程包括:
- 擁有互聯網連接。
- 擁有到您的DNS服務器的路由。
- 聯繫DNS服務器以解析URL。
- 擁有到URL解析出的IP地址的路由。
- 開放TCP端口80。
- 等等,等等。
確認您的互聯網連接
要開始疑難排解,首先需要確認您是否具有互聯網連接。您可以通過僅運行沒有任何參數的PowerShell的Test-NetConnection
來完成此操作。然而,如果您想獲得更多信息,我建議使用InformationLevel
參數和Detailed
參數。
這個簡單的命令一次檢查了您的本地連接和互聯網連接,並確認您的DNS客戶端能夠解析指向您的DNS服務器的名稱。將其視為您的網絡連接的一般健康檢查。此命令一次檢查了渲染網站所需的五個過程中的三個!
使用Test-NetConnection測試您與網站主機的連接
現在,我們需要將故障排除的方向指向相關的網站主機。讓我們以google.com為例。您也可以使用遠程計算機。
我們可以使用帶有ComputerName參數的Test-NetConnection同時確保可以在DNS中解析網站主機,存在一個可到達名稱解析的IP地址的TCP路由,以及可以對其進行ping測試。
儘管此步驟在技術上驗證了我們對google.com網頁服務器的路由,但我想找到更詳細的信息,了解我的封包通過哪些路由器流經才能到達google.com網頁服務器。為此,我將使用TraceRoute參數獲取一個列表。
確保TCP端口已開放
我們的最後一個測試是確保我們期望的網頁服務器運行的TCP端口是開放的。在這種情況下,由於我們只指定了google.com,我假設它是TCP端口80。為此,我們只需將另一個參數添加到Test-NetConnection中即可。因為Test-NetConnection理解幾個不同服務的標準TCP端口,我甚至不需要知道端口號。我只需將HTTP傳遞給CommonTCPPort參數,它就會為我完成工作。
然而,如果該網站可能在不同的端口上運行,例如8080,您可以直接使用Port參數指定TCP端口。
我們現在已經測試了本文開頭所提到的每個連接要求。如果我們在這個時候仍然無法渲染網站,我們已確認問題不在於我們的客戶端,我們可以將問題轉交給Google或可能是下游的DNS伺服器。