在PowerShell中,使用“Test-Connection”命令可以測試對端主機是否存活,相當於批處理中的Ping命令,但是如果要測試對端主機的某個端口是否可以連通,批處理中可以使用Telnet命令,那在PowerShell中還有類似的命令嗎?很遺憾,沒有。需要通過調用.Net對象才可以實現。
判斷192.168.1.10的80端口是否可以連通,方法如下:
$tcp = new-object Net.Sockets.TcpClient $tcp.Connect("192.168.1.10",80) |
如果該端口可以連通,則無任何返回值;如果不能連通,則會返回如下錯誤信息:
使用“2”個參數調用“Connect”時發生異常:“由於連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。 192.168.1.10:80” 所在位置 C:\Users\Administrator\AppData\Local\Temp\78bf4f80-9f64-4fcf-9e91-159978e6ac4c.ps1:2 字符: 13 + $tcp.Connect <<<< ("192.168.1.10",80) + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException |
在PowerShell中,通過使用“$?”,可以判斷前一個命令是否執行成功,所以在此我們可以使用“$?”來判斷其端口是否可以連通。如果返回值為“False”則表示端口不通,返回“True”則表示端口可以連通。完整的腳本如下:
$address = "192.168.1.10" $port = 80 $tcp = new-object Net.Sockets.TcpClient $tcp.Connect($address,$port) If ($? -ne "True") {Write-Host $address"的端口"$port"連接失敗"} Else {$tcp.Close()} |
更多可以參考 $tcp | get-member