개요
Test-NetConnection은 109장의 Test-Connection보다 한 단계 더 깊은 진단 정보를 제공하는 Windows 전용 cmdlet이다. Test-Connection이 범용 크로스플랫폼 ping 대체재라면, Test-NetConnection은 NetTCPIP 모듈(94장에서 다룬 CIM 기반 네트워킹 모듈군의 일부)에 속한 Windows 전용 도구로, TCP 포트 연결·경로 추적·경로 선택 진단까지 하나의 명령으로 묶어서 보여준다.
정신 모델은 “Test-Connection이 ‘살아있는가?‘를 묻는 청진기라면, Test-NetConnection은 ‘어느 경로로, 어느 포트로, 어떤 인터페이스를 거쳐 도달하는가’까지 보여주는 정밀 진단 장비"라는 것이다. 네트워크 문제를 조사할 때 Test-Connection으로 먼저 살아있는지 확인한 뒤, Test-NetConnection으로 구체적인 경로·포트 문제를 파고드는 흐름이 자연스럽다.
사용법
| |
종류
| 매개변수 집합 | 트리거 매개변수 | 동작 |
|---|---|---|
| ICMP(기본) | (없음) 또는 -TraceRoute | ping 테스트, 필요 시 경로 추적 |
| CommonTCPPort | -CommonTCPPort <이름> | 잘 알려진 서비스 포트(HTTP/RDP/SMB/WINRM)로 테스트 |
| RemotePort | -Port <포트번호> | 임의의 TCP 포트로 연결 테스트 |
| NetRouteDiagnostics | -DiagnoseRouting | 발신지 주소·경로 선택 과정 자체를 진단 |
| 주요 매개변수 | 의미 |
|---|---|
-InformationLevel | Quiet(불리언만) 또는 Detailed(경로·인터페이스 포함 전체 정보) |
-Hops | -TraceRoute와 함께 추적할 최대 홉 수 |
-ConstrainInterface | 경로 진단 시 특정 인터페이스로 강제 제한 |
예시
| |
주의사항·함정
Test-NetConnection은 Windows 전용이며 PowerShell 7의 크로스플랫폼 기반을 벗어난다: NetTCPIP 모듈은 macOS/Linux의 pwsh에서 사용할 수 없다. 크로스플랫폼 스크립트를 작성한다면 109장의 Test-Connection -TcpPort로 대체하거나, 플랫폼을 분기해 Windows에서만 Test-NetConnection을 호출해야 한다.
-CommonTCPPort는 4개 값(HTTP/RDP/SMB/WINRM)만 허용한다: HTTPS(443)나 SSH(22) 같은 다른 흔한 포트는 이름으로 지정할 수 없고, 반드시 -Port 매개변수에 숫자를 직접 넣어야 한다. 문서화된 값 이외의 문자열을 넣으면 매개변수 검증 오류가 난다.
-InformationLevel Detailed 없이는 진짜 진단 정보가 상당 부분 생략된다: 기본 출력은 PingSucceeded나 TcpTestSucceeded 같은 요약 속성 위주라, NameResolutionResults·NetRoute·MatchingIPsecRules 같은 상세 필드를 보려면 명시적으로 -InformationLevel Detailed를 지정해야 한다. 문제를 깊이 파고들 필요가 없다면 기본 출력으로 충분하지만, 경로·DNS 문제를 진단할 때는 이 옵션을 빠뜨리기 쉽다.
-DiagnoseRouting은 실제로 트래픽을 보내는 것이 아니라 “어떤 경로가 선택될지"를 시뮬레이션한다: RouteSelectionEvents·SourceAddressSelectionEvents 출력은 라우팅 테이블과 정책에 따른 계산 결과이지, 대상이 실제로 응답했는지를 보장하지 않는다. 연결 자체가 되는지 확인하려면 -Port나 기본 ICMP 테스트를 함께 사용해야 한다.
이식성: -Port를 이용한 TCP 연결 테스트는 Linux의 nc -zv <호스트> <포트>나 telnet <호스트> <포트>와 목적이 같지만, Test-NetConnection은 여기에 더해 경로 선택·IPsec 규칙까지 한 번에 보여준다는 점에서 정보량이 훨씬 많다. -TraceRoute는 Windows CMD의 tracert, Linux의 traceroute와 대응하지만, PowerShell 객체이므로 결과를 Where-Object로 특정 홉만 걸러내는 등 후처리가 가능하다.
![Featured image of post [PowerShell] 110. Test-NetConnection — 포트·경로 진단](/post/powershell/test-netconnection-port-diagnostic-powershell/wordcloud_hu_31b132a5b22f299f.webp)
![[PowerShell] 108. DSC 리소스와 로컬 구성 관리자(LCM)](/post/powershell/dsc-resource-lcm-powershell/wordcloud_hu_3a56f906dc3427ae.webp)
![[PowerShell] 109. Test-Connection — ping 대응](/post/powershell/test-connection-ping-powershell/wordcloud_hu_5dcd5e1b70095610.webp)
![[PowerShell] 110. Test-NetConnection — 포트·경로 진단](/post/powershell/test-netconnection-port-diagnostic-powershell/wordcloud_hu_4ef96a3f0e037e64.webp)
![[PowerShell] 111. Resolve-DnsName — DNS 질의](/post/powershell/resolve-dnsname-dns-query-powershell/wordcloud_hu_979b25d1d2bad2ef.webp)
![[PowerShell] 112. Get-NetIPConfiguration/Get-NetAdapter](/post/powershell/get-netipconfiguration-get-netadapter-powershell/wordcloud_hu_52dd3e956ba2b525.webp)
![[PowerShell] 113. Invoke-WebRequest/Invoke-RestMethod](/post/powershell/invoke-webrequest-invoke-restmethod-powershell/wordcloud_hu_d83d75f2879b9315.webp)
![[PowerShell] 00. 과정 개요와 커리큘럼](/post/powershell/getting-started-powershell/wordcloud_hu_15979a96cd2a594f.webp)