ค้นหาเว็บไซต์

วิธีใช้ Test-NetConnection ใน PowerShell


คุณรู้ไหมว่าคำสั่ง ping ซึ่งมีอายุ 38 ปีนั้นเก่ากว่า command prompt? คุณอาจได้เปลี่ยนพรอมต์คำสั่งจากชุดเครื่องมือรายวันของคุณด้วย PowerShell แล้ว ตอนนี้ถึงเวลาแทนที่คำสั่ง ping ด้วย PowerShell Test-NetConnection

ข้อดีของการ ping คือเป็นคำสั่งที่สั้นมากในการพิมพ์ แต่ข้อเสียคือเพียงทดสอบการเชื่อมต่อเครือข่ายผ่าน ICMP เท่านั้น มันไม่ได้ทำการติดตามหรือการทดสอบพอร์ตใดๆ โดยส่วนใหญ่เราจำเป็นต้องรวมคำสั่ง ping เข้ากับ Tracert และ nslookup เพื่อรับรายละเอียดทั้งหมดที่เราต้องการ

Test-NetConnection คือตัวตายตัวแทนของ PowerShell Test-Connection cmdlet อย่างหลังเป็นขั้นตอนแรกในการแทนที่คำสั่ง ping โดยมีข้อดีบางประการ Test-NetConnection มีประสิทธิภาพมากกว่ามากและควรเป็นเครื่องมือที่คุณใช้เมื่อต้องแก้ไขปัญหาเครือข่าย

การทดสอบการเชื่อมต่อ PowerShell

ก่อนที่เราจะดูวิธีใช้ Test-NetConnection cmdlet ใน PowerShell ก่อนอื่นเรามาดู Test-Connection กันก่อน

เช่นเดียวกับ ping ใช้ Test-Connection รวมถึงโปรโตคอล ICMP เพื่อทดสอบการเชื่อมต่อเครือข่ายของอุปกรณ์เครือข่าย ในรูปแบบที่ง่ายที่สุด คุณสามารถพิมพ์ Test-Connection หรือ เพื่อทำการทดสอบการเชื่อมต่ออย่างรวดเร็ว

# Check connection on IP Address
Test-Connection 8.8.8.8

Source        Destination     IPV4Address      Bytes    Time(ms)
------        -----------     -----------      -------  ----
lab01         8.8.8.8         8.8.8.8          32       12
lab01         8.8.8.8         8.8.8.8          32       13
lab01         8.8.8.8         8.8.8.8          32       12
lab01         8.8.8.8         8.8.8.8          32       12

# Check connection on DNS Name
Test-Connection google.com

แต่แน่นอนว่าเราทำได้มากกว่านั้นมาก ตัวอย่างเช่น เราสามารถทดสอบปลายทางหลายแห่งด้วยคำสั่งเดียว:

Test-Connection -ComputerName 8.8.8.8, 1.1.1.1

หรือระบุพารามิเตอร์ เช่น จำนวนฮ็อป ขนาดบัฟเฟอร์ หรือแม้แต่เพิ่มการหน่วงเวลาระหว่างปิง:

Test-Connection -ComputerName 8.8.8.8 -Count 3 -Delay 2 -MaxHops 255 -BufferSize 256

การทดสอบคอมพิวเตอร์ระยะไกล

นอกจากนี้เรายังสามารถทดสอบการเชื่อมต่อเครือข่ายใน PowerShell ของคอมพิวเตอร์ระยะไกลด้วย Test-Connection ข้อกำหนดเพียงอย่างเดียวคือบัญชีของคุณสามารถเข้าถึงคอมพิวเตอร์ระยะไกลได้

Test-Connection -Source srv-lab02 -ComputerName 8.8.8.8

คุณยังสามารถพิมพ์ tnc แทน Test-NetConnecting ได้

ดังนั้นคุณจึงสามารถพิมพ์: tnc 8.8.8.8 เพื่อ ping Google เป็นต้น

PowerShell ทดสอบการเชื่อมต่อไปยังเซิร์ฟเวอร์

คุณสมบัติที่มีประโยชน์อีกประการหนึ่งของ PowerShell Test-Connection คือสามารถส่งคืน $true หรือ $false ได้ วิธีนี้ช่วยให้คุณตรวจสอบว่าคอมพิวเตอร์พร้อมใช้งานหรือไม่ก่อนที่จะเชื่อมต่อ Test-Connect จะส่งกลับ $true หากส่ง Ping สำเร็จ 4 ครั้ง

if (Test-Connection -TargetName srv-lab02 -Quiet) { New-PSSession -ComputerName srv-lab02}

PowerShell ทดสอบ-NetConnection

Test-NetConnection cmdlet คือตัวตายตัวแทนของ Test-Connection ดังนั้นฟังก์ชันพื้นฐานจึงเหมือนกันหมด มีเพียงเอาต์พุตเท่านั้นที่มีรายละเอียดมากกว่า เรายังคงสามารถส่ง Ping ไปที่ Google ได้อย่างรวดเร็ว:

# Test the network connection to Google
Test-NetConnection 8.8.8.8

ComputerName           : 8.8.8.8
RemoteAddress          : 8.8.8.8
InterfaceAlias         : Wi-Fi
SourceAddress          : 192.168.1.82
PingSucceeded          : True
PingReplyDetails (RTT) : 9 ms

ดังที่คุณเห็นผลลัพธ์มีรายละเอียดมากขึ้น มันจะแสดงอินเทอร์เฟซที่ใช้ ที่อยู่ IP ต้นทางของคุณ และดูว่า Ping สำเร็จหรือไม่ เรายังขยายสิ่งนี้ได้ด้วยการเพิ่มสวิตช์ informationLevel "Detailed"

เมื่อตั้งค่า informationLevel เป็นแบบละเอียด โดยทั่วไปแล้วจะทำการค้นหา nslookup ที่อยู่ปลายทาง และจะเพิ่มการกระโดดครั้งแรกในการค้นหา

test-netconnection Google.com -InformationLevel "Detailed"                                                                                                                                                                                                                                                                                                            ComputerName           : Google.com                                                                                     RemoteAddress          : 172.217.17.78                                                                                  NameResolutionResults  : 172.217.17.78                                                                                  InterfaceAlias         : Wi-Fi                                                                                          SourceAddress          : 192.168.1.82                                                                                   NetRoute (NextHop)     : 192.168.1.1                                                                                    PingSucceeded          : True                                                                                           PingReplyDetails (RTT) : 6 ms

คุณสามารถทำการทดสอบการเชื่อมต่อเครือข่ายอย่างรวดเร็วใน PowerShell เมื่อคุณรัน Test-NetConnection โดยไม่มีพารามิเตอร์ใดๆ วิธีนี้ช่วยให้เราสามารถตรวจสอบได้ว่าเราเชื่อมต่อกับเครือข่ายท้องถิ่น เข้าถึงอินเทอร์เน็ต และสามารถแก้ไขชื่อ DNS ได้หรือไม่

❯ Test-NetConnection

ComputerName           : internetbeacon.msedge.net
RemoteAddress          : 13.107.4.52
InterfaceAlias         : Wi-Fi
SourceAddress          : 192.168.1.82
PingSucceeded          : True
PingReplyDetails (RTT) : 10 ms

PowerShell TraceRoute พร้อม Test-NetConnection

ด้วย Test-NetConnection cmdlet ใน PowerShell เรายังสามารถดำเนินการ traceroute ได้อีกด้วย คุณจะต้องเพิ่มพารามิเตอร์ traceroute ลงใน cmdlet เท่านั้น

# PowerShell TraceRoute with Test-NetConnection
Test-NetConnection 172.217.17.87 -traceRoute

เมื่อเพิ่มพารามิเตอร์ Traceroute ลงใน PowerShell Test-NetConnection cmdlet คุณจะได้รับรายการการกระโดดทุกครั้งที่ส่งผ่านระหว่างการ ping คุณสามารถจำกัดจำนวนฮ็อพที่จะติดตามด้วยพารามิเตอร์ hops

หากต้องการทดสอบเวลาแฝงของแต่ละฮอป คุณสามารถเลือกออบเจ็กต์ TraceRoute และทดสอบการเชื่อมต่อของแต่ละฮอป:

Test-NetConnection 172.217.17.78 -traceRoute -Hops 3 | select-object TraceRoute | foreach-object {test-connection $_.TraceRoute -count 1}

สแกนพอร์ต Powershell

ใน Windows เราไม่สามารถ ping พอร์ตด้วย ping cmdlet ได้จริงๆ เราสามารถใช้ telnet เพื่อทดสอบว่าพอร์ตตอบสนองหรือไม่ แต่ด้วย Test-NetConnection เราสามารถสแกนพอร์ตใน PowerShell ได้ง่ายขึ้นมาก

เราสามารถกำหนดพอร์ต TCP ใดๆ ที่เราต้องการทดสอบ หรือใช้พอร์ตทั่วไปอย่างใดอย่างหนึ่ง HTTP, RDP, SMB หรือ WINRM

# Test if HTTP port is open
Test-NetConnection google.com -CommonTCPPort "Http"

# Or define a port number
Test-NetConnection google.com -Port 80

ด้วยเหตุนี้ เราจึงสามารถสร้างสคริปต์สแกนพอร์ต PowerShell แบบง่ายๆ ที่สามารถตรวจสอบพอร์ตที่เปิดอยู่บนเซิร์ฟเวอร์ได้ สคริปต์ด้านล่างมีไว้เพื่อให้คุณทราบว่าคุณสามารถสแกนหลายพอร์ตด้วย PowerShell ได้อย่างไร

$ports = 22,53,80,445

$ports | ForEach-Object {$port = $_; if (Test-NetConnection -ComputerName 8.8.8.8 -Port $port -InformationLevel Quiet -WarningAction SilentlyContinue) {"Port $port is open" } else {"Port $port is closed"} }

ห่อขึ้น

อย่างที่คุณเห็น PowerShell Test-NetConnection เป็น cmdlet ที่ทรงพลังและมีประโยชน์มากสำหรับใช้ในการทำงานประจำวันของคุณ ในตอนต้นของบทความ ฉันบอกว่า ping นั้นสั้นกว่าในการพิมพ์ คุณสามารถแก้ไขได้ด้วยการสร้างนามแฝงในโปรไฟล์ PowerShell ของคุณ หรือใช้นามแฝงในตัว tnc

# Create an alias "nettest" or maybe just "tn"
Set-Alias nettest Test-NetConnection

วิธีนี้คุณสามารถพิมพ์ "nettest" แทน Test-NetConnection อ่านเพิ่มเติมเกี่ยวกับการตั้งค่าโปรไฟล์ PowerShell ของคุณในบทความนี้

หากคุณมีคำถามใด ๆ เพียงแค่แสดงความคิดเห็นด้านล่าง

บทความที่เกี่ยวข้อง