개요
Test-Connection은 ICMP 에코 요청(ping)을 보내 원격 컴퓨터의 응답 여부를 확인하는 cmdlet으로, CMD·Bash의 ping 명령이 하던 일을 PowerShell의 객체 파이프라인 안으로 가져온 것이다. 지금까지 프로세스(89–90장)·서비스(91장)·이벤트 로그(93장) 같은 로컬 시스템 관리를 다뤘다면, Part 16(네트워크와 웹)은 이 장을 시작으로 원격 대상과의 연결성·경로·DNS·HTTP 통신을 진단하는 도구로 넘어간다.
정신 모델은 “전통적인 ping이 화면에 텍스트 줄을 찍고 사라진다면, Test-Connection은 각 응답마다 TestConnectionCommand+PingStatus 객체를 파이프라인에 흘려보내 Where-Object·Measure-Object(17장) 같은 다른 cmdlet과 곧바로 조합할 수 있게 한다"는 것이다. 즉 ping 결과를 눈으로 읽는 대신 코드로 판단할 수 있게 된다.
사용법
| |
종류
| 매개변수 집합 | 트리거 매개변수 | 동작 |
|---|---|---|
| DefaultPing(기본) | (없음) | 기본 4회 ICMP 에코 요청 |
| RepeatPing | -Repeat | 중단할 때까지 계속 ping(첫 대상만) |
| TraceRoute | -Traceroute | 대상까지의 경로(홉)를 추적 |
| MtuSizeDetect | -MtuSize | 경로 MTU 크기 탐지 |
| TcpPort | -TcpPort <포트> | ICMP 대신 지정한 TCP 포트로 연결 테스트 |
| 주요 매개변수 | 의미 |
|---|---|
-Count | 보낼 에코 요청 수(기본 4) |
-Quiet | 불리언 값만 반환(하나라도 성공하면 $true) |
-TimeoutSeconds | 응답 대기 시간(기본 5초, PowerShell 6.0+) |
-IPv4/-IPv6 | 사용할 프로토콜 강제 지정 |
-ResolveDestination | 대상의 DNS 이름을 함께 확인 |
예시
| |
주의사항·함정
-Source 매개변수는 PowerShell 6 이상에서 지원되지 않는다: Windows PowerShell 5.1 스크립트를 그대로 pwsh로 옮기면서 -Source를 쓰던 코드가 있다면 오류가 난다. PowerShell 6+에서는 로컬 컴퓨터에서만 ping을 보낼 수 있고, 다른 발신지를 지정하려면 84장에서 배운 Invoke-Command로 해당 컴퓨터에서 원격 실행해야 한다.
-Quiet는 “하나라도 성공하면 $true“이지 “전부 성공"이 아니다: 기본 4회 중 1회만 응답해도 -Quiet는 $true를 반환한다. 안정적인 연결인지 확인하려면 -Quiet 없이 전체 PingStatus 객체를 받아 Measure-Object로 성공률을 직접 계산해야 한다.
Test-Connection이 반환하는 객체 타입은 사용한 매개변수에 따라 완전히 달라진다: 기본 ping은 PingStatus, -Traceroute는 TraceStatus, -MtuSize는 PingMtuStatus, -TcpPort는 -Detailed 유무에 따라 Boolean 또는 TcpPortStatus를 반환한다. 스크립트에서 결과 객체의 속성에 접근하기 전에 어떤 매개변수 조합을 썼는지 먼저 확인해야 한다.
연속 ping(-Repeat)은 여러 대상을 지정해도 첫 번째 대상만 처리한다: -Repeat와 -Count는 함께 쓸 수 없는 매개변수 집합이며, -TargetName에 배열을 넘겨도 나머지 대상은 조용히 무시된다. 여러 서버를 지속적으로 감시하려면 각 대상마다 별도의 백그라운드 Job을 띄워야 한다.
이식성: CMD ping과 Bash ping은 모두 텍스트 줄을 표준 출력에 찍을 뿐이라, 응답 시간이나 성공 여부를 스크립트에서 활용하려면 정규식으로 파싱해야 한다. Test-Connection은 이 파싱 단계를 완전히 없애고 Latency·Status·Address 같은 속성에 바로 접근하게 해준다는 점이 셸 스크립팅과 PowerShell 스크립팅의 근본적 차이를 보여주는 예다. 다만 Linux ping의 -i(간격)·-c(횟수) 같은 옵션 이름과 Test-Connection의 -Delay·-Count는 이름이 달라 그대로 옮겨 쓸 수 없다.
![Featured image of post [PowerShell] 109. Test-Connection — ping 대응](/post/powershell/test-connection-ping-powershell/wordcloud_hu_86d3c6965ffb4984.webp)
![[PowerShell] 107. DSC 구성(Configuration) 작성과 적용](/post/powershell/dsc-configuration-write-apply-powershell/wordcloud_hu_a3e68be2f0f53bee.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] 119. PowerShell 7의 크로스플랫폼 특징과 새 기능](/post/powershell/powershell-7-cross-platform-features/wordcloud_hu_f7049c437c0a91dc.webp)