ใน PowerShell คุณสามารถใช้ไฟล์ทดสอบการเชื่อมต่อCMDLET เพื่อตรวจสอบว่ามีพอร์ต (เปิด) บนคอมพิวเตอร์ระยะไกลหรือไม่ คุณสามารถใช้ CMDLET นี้เพื่อตรวจสอบการตอบสนองและความพร้อมใช้งานของเซิร์ฟเวอร์ระยะไกลหรือบริการเครือข่ายทดสอบว่าพอร์ต TCP ถูกบล็อกโดยไฟร์วอลล์ตรวจสอบความพร้อมใช้งานของ ICMP และการกำหนดเส้นทาง ในความเป็นจริง,Test-NetConnectionแทนที่เครื่องมือผู้ดูแลระบบเครือข่ายยอดนิยมหลายอย่างเช่นping-tracert-telnet-pathping, เครื่องสแกนพอร์ต TCP ฯลฯ
สารบัญ:
- ตรวจสอบพอร์ต TCP แบบเปิดด้วย Test-NetConnection
- POWERSHELL: ตรวจสอบพอร์ตเปิดบนโฮสต์หลายตัว
- เครื่องสแกนพอร์ต TCP/IP อย่างง่ายใน PowerShell
- วิธีแสดงรายการพอร์ตเปิดบน Windows ด้วย PowerShell
ตรวจสอบพอร์ต TCP แบบเปิดด้วย Test-NetConnection
คุณสามารถใช้ cmdlet test-netconnection เพื่อตรวจสอบเฉพาะพอร์ต TCP ตัวอย่างเช่นในการตรวจสอบว่าพอร์ต TCP 25 (โปรโตคอล SMTP) เปิดบนเซิร์ฟเวอร์เมลระยะไกล:
Test-NetConnection -ComputerName ny-msg01 -Port 25
บันทึก- คุณสามารถทดสอบการเชื่อมต่อพอร์ต TCP ได้เฉพาะโดยใช้ CMDLET Test-NetConnection อย่างไรก็ตามคุณไม่สามารถใช้ CMDLET เพื่อตรวจสอบความพร้อมใช้งานของพอร์ต UDP ระยะไกล
คำสั่ง test-netconnection มีนามแฝงTNC- เวอร์ชันสั้น ๆ ของคำสั่งเดียวกันนั้นมีลักษณะเช่นนี้:
TNC ny-msg01 -Port 25

มาดูผลลัพธ์ของคำสั่ง:
ComputerName : ny-msg01 RemoteAddress : 10.20.1.7 RemotePort : 25 InterfaceAlias : CORP SourceAddress : 10.20.1.79 PingSucceeded : True PingReplyDetails (RTT) : 0 ms TcpTestSucceeded : True
อย่างที่คุณเห็น CMDLET จะแก้ไขชื่อเซิร์ฟเวอร์เป็นที่อยู่ IP ตรวจสอบการตอบกลับ ICMP (คล้ายกับping) และตรวจสอบการตอบสนองจากพอร์ต TCP (ความพร้อมใช้งานพอร์ต) เซิร์ฟเวอร์ที่ระบุตอบสนองผ่าน ICMP (PingSucceeded = True) และพอร์ต TCP 25 เปิดอยู่ (RemotePort=25, TcpTestSucceeded= True-
บันทึก.หากคำสั่งส่งคืน pingsucceeded = false และ tCptestSucceeded = TRUE นี่เป็นไปได้มากที่สุดหมายความว่าการร้องขอ ICMP Echo (PING) ถูกปิดใช้งานบนคอมพิวเตอร์ระยะไกล
หากคุณเรียกใช้ไฟล์test-netconnection โดยไม่มีพารามิเตอร์จะตรวจสอบว่าคอมพิวเตอร์เชื่อมต่อกับอินเทอร์เน็ตหรือไม่ (ตรวจสอบความพร้อมของไฟล์internetbeacon.msedge.netเจ้าภาพ).


คุณสามารถเพิ่ม -รายละเอียดระดับข้อมูลตัวเลือกในการแสดงข้อมูลรายละเอียดเมื่อตรวจสอบพอร์ต TCP ระยะไกล:
TNC 192.168.32.101 -Port 3389 -InformationLevel Detailed


cmdlet มีพารามิเตอร์พิเศษ -commontcpportซึ่งช่วยให้คุณสามารถระบุชื่อของโปรโตคอลเครือข่ายที่รู้จัก (HTTP, RDP, SMB, WinRM)
ตัวอย่างเช่นในการตรวจสอบความพร้อมใช้งานของเว็บเซิร์ฟเวอร์ HTTP คุณสามารถใช้คำสั่ง:
Test-NetConnection -ComputerName woshub.com -CommonTCPPort HTTP
หรือตรวจสอบความพร้อมใช้งานของพอร์ต RDP เริ่มต้น (TCP/3389):
การอ่านเพิ่มเติม:
Test-NetConnection ny-rds1 –CommonTCPPort RDP
คุณสามารถแสดงรายการพารามิเตอร์ทั้งหมดที่ Test-NetConnection Cmdlet ส่งคืน:
Test-NetConnection ny-man01 -port 445|Format-List *


หากคุณต้องการดูว่าพอร์ตพร้อมใช้งานสามารถตรวจสอบได้เร็วขึ้น:
TNC ny-msg1 -Port 25 -InformationLevel Quiet
cmdlet ส่งคืนTrueซึ่งหมายความว่าพอร์ต TCP ระยะไกลเปิดอยู่
![]()
![]()
เคล็ดลับ-ใน Windows PowerShell เวอร์ชันก่อนหน้า (ก่อนเวอร์ชัน 4.0) คุณสามารถตรวจสอบความพร้อมใช้งานของพอร์ต TCP ระยะไกลด้วยคำสั่ง:
(New-Object System.Net.Sockets.TcpClient).Connect('ny-msg01', 25)


คุณสามารถใช้ cmdlet test-netconnection เพื่อติดตามเส้นทางไปยังเซิร์ฟเวอร์ระยะไกลโดยใช้--tracerouteพารามิเตอร์ (คล้ายกับในตัวtracertคำสั่งใน windows) คุณสามารถ จำกัด จำนวนสูงสุดของฮ็อพในระหว่างการตรวจสอบเส้นทางโดยใช้ไฟล์-hopsพารามิเตอร์.
Test-NetConnection ny-man01 –TraceRoute
CMDLET ส่งคืนความล่าช้าในการเข้าถึงเครือข่ายสรุปในมิลลิวินาที (PingReplyDetails (RTT): 41 ms) เช่นเดียวกับที่อยู่ IP ทั้งหมดของเราเตอร์ระหว่างทางไปยังโฮสต์ปลายทาง


คุณสามารถใช้ PowerShell เพื่อตรวจสอบความพร้อมใช้งานของพอร์ตเฉพาะในคอมพิวเตอร์ระยะไกลจำนวนหนึ่ง บันทึกรายการชื่อโฮสต์หรือที่อยู่ IP ในไฟล์ข้อความธรรมดาที่มีชื่อservers.txt-
ตัวอย่างเช่นงานของคุณคือการค้นหาโฮสต์ที่พอร์ต TCP/25 ไม่ตอบสนองหรือปิดในรายการเซิร์ฟเวอร์:
Get-Content c:PSlist_servers.txt | where { -NOT (Test-Netconnection $_ -Port 25 -InformationLevel Quiet)}| Format-Table -AutoSize
คุณสามารถใช้สคริปต์ PowerShell Monitoring อย่างง่ายที่ตรวจสอบความพร้อมใช้งานของเซิร์ฟเวอร์ระยะไกลและแสดงการแจ้งเตือนแบบป๊อปอัพหากเซิร์ฟเวอร์ใด ๆ ไม่พร้อมใช้งาน
ตัวอย่างเช่นคุณสามารถตรวจสอบความพร้อมใช้งานของบริการพื้นฐานในตัวควบคุมโดเมนทั้งหมดในระหว่างการตรวจสุขภาพโฆษณา (รายการ DC สามารถรับได้ด้วย cmdlet get-addomaincontroller) ลองตรวจสอบบริการต่อไปนี้เกี่ยวกับ DC (มีกฎ 'โดเมนและความน่าเชื่อถือ' ที่คล้ายกันในเครื่องมือ PortQry):
- RPC - TCP/135
- LDAP - TCP/389
- LDAP - TCP/3268
- DNS - TCP/53
- Kerberos - TCP/88
- SMB - TCP/445
$Ports = "135","389","636","3268","53","88","445","3269", "80", "443"
$AllDCs = Get-ADDomainController -Filter * | Select-Object Hostname,Ipv4address
ForEach($DC in $AllDCs){
Foreach ($P in $Ports){
$check=Test-NetConnection $DC.Ipv4address -Port $P -WarningAction SilentlyContinue
If ($check.tcpTestSucceeded -eq $true)
{Write-Host $DC.hostname $P -ForegroundColor Green -Separator " => "}
else
{Write-Host $DC.hostname $P -Separator " => " -ForegroundColor Red}
}
}
สคริปต์ตรวจสอบพอร์ต TCP ที่ระบุไว้ในตัวควบคุมโดเมนและหากพอร์ตใด ๆ ไม่พร้อมใช้งานก็จะเน้นเป็นสีแดง (คุณสามารถเรียกใช้สคริปต์ PowerShell นี้เป็นบริการ Windows)


เครื่องสแกนพอร์ต TCP/IP อย่างง่ายใน PowerShell
คุณสามารถใช้ PowerShell เพื่อใช้เครื่องสแกน IP อย่างง่ายที่สแกนโฮสต์ระยะไกลหรือ Subnets IP สำหรับพอร์ต TCP แบบเปิด/ปิด
ในการสแกนช่วงของที่อยู่ IP ระหว่าง 192.168.1.100 และ 192.168.1.150 และคอมพิวเตอร์แสดงที่มีพอร์ต 3389 เปิด:
foreach ($ip in 100..150) {Test-NetConnection -Port 3389 -InformationLevel "Detailed" 192.168.1.$ip}
สแกนพอร์ต TCP ช่วง (จาก 1 ถึง 1024) บนโฮสต์ระยะไกล:
foreach ($port in 1..1024) {If (($a=Test-NetConnection srvfs01 -Port $port -WarningAction SilentlyContinue).tcpTestSucceeded -eq $true){ "TCP port $port is open!"}}


วิธีแสดงรายการพอร์ตเปิดบน Windows ด้วย PowerShell
ใช้get-nettcpconnectioncmdlet เพื่อแสดงรายการพอร์ตที่เปิดบนคอมพิวเตอร์ท้องถิ่น (นี่คือ PowerShell เทียบเท่าNETSTAT- รายการพอร์ต TCP ที่เปิดอยู่ทั้งหมดบนคอมพิวเตอร์สามารถดูได้ดังนี้:
Get-NetTcpConnection -State Listen | Select-Object LocalAddress,LocalPort| Sort-Object -Property LocalPort | Format-Table


คุณยังสามารถใช้ CMDLET GET-NETTCPConnection เพื่อแสดงรายการการเชื่อมต่อ TCP/IP ที่ใช้งานอยู่
หากคุณต้องการทราบว่าโปรแกรม (กระบวนการ) กำลังฟังอยู่ในพอร์ตเฉพาะบนคอมพิวเตอร์ของคุณให้ใช้คำสั่งต่อไปนี้ (โดยที่ 443 เป็นหมายเลขพอร์ตที่คุณต้องการตรวจสอบ):
Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess | ft Id, ProcessName, UserName, Path















