Test-Connection en PowerShell: guía completa del cmdlet

Última actualización: 14/08/2025
Autor: Isaac
  • Test-Connection ofrece ping, traceroute, MTU y pruebas TCP con salida estructurada.
  • En PowerShell 6/7 cambia sintaxis, tipos devueltos y añade parámetros como -Traceroute y -Detailed.
  • Windows PowerShell 5.1 usa WMI y Win32_PingStatus con opciones de autenticación y suplantación.
  • -Quiet devuelve booleanos, -Repeat itera continuo y -MtuSize calcula el Path MTU.

Guía de Test-Connection en PowerShell

Si trabajas con redes en Windows, Linux o macOS, tarde o temprano vas a querer comprobar si un host responde y cómo de saludable es el trayecto. El cmdlet Test-Connection es la navaja suiza moderna para pings ICMP, traceroute, detección de MTU y pruebas TCP desde PowerShell, con salida estructurada que se puede filtrar y procesar.

Además, la historia del cmdlet tiene dos caras: en Windows PowerShell clásico (5.1) se apoyaba en WMI y devolvía Win32_PingStatus, mientras que en PowerShell 6 y posteriores el cmdlet se rediseñó y amplió para ser multiplataforma y exponer objetos específicos como PingStatus, TraceStatus o TcpPortStatus. Conocer ambas familias de parámetros y salidas te permite diagnosticar a fondo y con precisión.

Qué es Test-Connection y qué resuelve

Test-Connection envía solicitudes de eco ICMP (ping) a uno o varios destinos y devuelve las respuestas; también puede trazar la ruta (traceroute), calcular el Path MTU y probar si un puerto TCP está accesible. Frente al ejecutable ping de toda la vida, el cmdlet retorna objetos ricos que puedes canalizar, filtrar y convertir a informes o dashboards.

En su versión moderna, el cmdlet añade parámetros como -Traceroute, -MtuSize, -TcpPort, -Repeat, -TimeoutSeconds, -IPv4/-IPv6 y -Detailed (este último a partir de PowerShell 7.4 para desglosar los intentos TCP). Con -Quiet puedes limitar la salida a booleanos por destino para decisiones rápidas en scripts.

En entornos donde antes combinabas ping, tracert, nslookup o telnet, PowerShell aporta opciones nativas para cubrir prácticamente todo el diagnóstico de conectividad desde una sola herramienta. Y si prefieres otra aproximación, existe Test-NetConnection para chequeos combinados de red, pero este artículo se centra en exprimir Test-Connection.

Cambios clave: Windows PowerShell 5.1 vs PowerShell 6/7

Hay dos etapas claras en la evolución del cmdlet. En Windows PowerShell 5.1 y anteriores el cmdlet usa WMI y devuelve Win32_PingStatus; expone parámetros como -ComputerName, -AsJob, -DcomAuthentication, -Impersonation, -Protocol, -ThrottleLimit, -TimeToLive (TTL) y -WsmanAuthentication, entre otros.

Con el salto a PowerShell 6+, el cmdlet se reescribió para ser multiplataforma y su API cambió: ahora se utiliza -TargetName (en vez de -ComputerName), aparecen los conjuntos de parámetros Ping/Repeat/Traceroute/MtuSize/TcpPort, las salidas son tipos específicos como PingStatus, TraceStatus, PingMtuStatus o TcpPortStatus, y llegan -TimeoutSeconds, -ResolveDestination y -Detailed (7.4) para TCP.

Esto implica que, si escribes scripts portables, debes detectar la versión y ajustar parámetros y procesamiento de salida. Una opción es cubrir ambos mundos con ramas condicionales ($PSVersionTable.PSVersion.Major).

Sintaxis y conjuntos de parámetros modernos (PowerShell 6+)

El cmdlet ofrece varios conjuntos de parámetros que activan modos distintos. Aquí tienes la panorámica con sus opciones principales:

  • Default Ping: Test-Connection <string[]>
  • Repeat Ping: Test-Connection <string[]> -Repeat
  • Traceroute: Test-Connection <string[]> -Traceroute
  • MtuSizeDetect: Test-Connection <string[]> -MtuSize
  • TcpPort: Test-Connection <string[]> -TcpPort <int>
  Windows Update ya no comprende las actualizaciones en Windows 8/8.1/10

En todos los modos, -TargetName es obligatorio y acepta nombres DNS o direcciones IPv4/IPv6. La salida por defecto en ping es una secuencia de objetos PingStatus, uno por eco.

Sintaxis y ejemplos del cmdlet

Sintaxis clásica (Windows PowerShell 5.1)

En entornos Windows PowerShell 5.1 se usan otras firmas, con -ComputerName como parámetro central y varias opciones de autenticación WMI:

  • Default: Test-Connection <string[]>
  • Source: Test-Connection <string[]> <string[]>
  • Quiet: Test-Connection <string[]>

En este caso, la salida por defecto es ManagementObject Win32_PingStatus, y con -AsJob se devuelve un objeto de trabajo (System.Management.Automation.RemotingJob).

Parámetros modernos, explicados uno a uno

-TargetName <string[]>: destinos a probar, admite nombres y direcciones IPv4/IPv6; posición 0 y obligatorio; acepta canalización por valor y por nombre de propiedad.

-Ping: fuerza el modo ping ICMP; es el comportamiento por defecto, por lo que suele omitirse salvo combinaciones específicas.

-Repeat: envía pings de forma continua; si proporcionas varios destinos, solo repite sobre el primero y omite el resto; incompatible con -Count en ping.

-Traceroute: traza la ruta hasta el destino devolviendo objetos TraceStatus por salto; desde PowerShell 6 y compatible con -ResolveDestination para nombres DNS intermedios.

-MtuSize: detecta el Path MTU al destino, retornando PingMtuStatus con el tamaño de MTU efectivo; útil combinado con -DontFragment y -BufferSize.

-TcpPort <int>: intenta abrir una conexión TCP al puerto especificado en el destino; devuelve $true o $false (y con -Detailed en 7.4, objetos TcpPortStatus con latencias e información por intento).

-Count <int>: número de eco solicitudes; por defecto 4 en ping y válido también con TcpPort.

-Delay <int>: segundos entre intentos; útil para congestión o pruebas sostenidas.

-BufferSize <int>: bytes de carga útil; 32 por defecto; ajusta junto a -DontFragment para pruebas de MTU.

-DontFragment: establece el flag de no fragmentación en IP; clave para Path MTU Discovery.

-IPv4 / -IPv6: obligan al protocolo IP que se usará; útiles en hosts dual-stack o cuando hay problemas de resolución.

-MaxHops <int>: máximo de saltos permitidos; 128 por defecto en Windows 10+.

-ResolveDestination: intenta resolver el nombre DNS de destino y, junto a -Traceroute, también los hosts intermedios si es posible.

-Source <string>: origen de envío (equipo) cuando procede; por defecto el local, útil en escenarios multi-origen.

-Quiet: suprime errores y devuelve booleanos por destino; $true si al menos un ping llega, $false si todos fallan.

-TimeoutSeconds <int>: tiempo máximo de espera por respuesta; 5 segundos por defecto; disponible desde PowerShell 6.

-Detailed: en pruebas TCP (-TcpPort), devuelve TcpPortStatus con Id, dirección, latencia, Connected y Status; incorporado en PowerShell 7.4.

Parámetros y opciones clásicas (Windows PowerShell 5.1)

-ComputerName <string[]>: destinos a testear; obligatorio y no depende de PowerShell remoting.

  El inesperado dominio de Google en Windows: un golpe estratégico para Microsoft

-AsJob: ejecuta el cmdlet en segundo plano; devuelve un objeto de trabajo recuperable con Receive-Job para no bloquear la sesión.

-DcomAuthentication <AuthenticationLevel>: nivel de autenticación COM usado con WMI; valores aceptados Default, None, Connect, Call, Packet, PacketIntegrity, PacketPrivacy, Unchanged (por defecto Packet).

-Impersonation <ImpersonationLevel>: nivel de suplantación WMI; valores Default, Anonymous, Identify, Impersonate, Delegate (por defecto Impersonate).

-Protocol <string>: protocolo para WMI; DCOM o WSMan según configuración.

-WsmanAuthentication <string>: mecanismo de autenticación cuando se usa WSMan; admite Default, Basic, Negotiate, CredSSP, Digest, Kerberos.

-ThrottleLimit <int>: máximo de conexiones simultáneas para el comando; por defecto 32.

-TimeToLive (TTL) <int>: número máximo de reenvíos antes de descartar el paquete; 128 por defecto en Windows (alias TTL).

-Source <string[]> y -Credential <PSCredential>: para enviar pings desde otros orígenes con credenciales adecuadas, especialmente útil para comparar latencia desde diferentes ubicaciones.

Ejemplos prácticos con PowerShell 6/7

Ping básico IPv4 a un servidor concreto y análisis de la salida PingStatus:

Test-Connection -TargetName Server01 -IPv4

Ping a múltiples destinos en un solo comando con matriz de nombres:

Test-Connection -TargetName Server01, Server02, Server12

Personalizar count, delay, hops y tamaño de búfer cuando la red está cargada:

Test-Connection -TargetName Server01 -Count 3 -Delay 2 -MaxHops 255 -BufferSize 256

Ejecutar como trabajo en segundo plano leyendo destinos de un archivo y esperando resultados:

$job = Start-Job -ScriptBlock { Test-Connection -TargetName (Get-Content -Path 'Servers.txt') }
$results = Receive-Job $job -Wait

Crear una PSSession solo si hay conectividad al menos en un eco:

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

Descubrir la ruta con traceroute y devolver TraceStatus por salto:

Test-Connection -TargetName www.google.com -Traceroute

Prueba TCP detallada (PowerShell 7.4) para un puerto TLS típico:

Test-Connection bing.com -TcpPort 443 -Detailed -Count 4

Ejemplos prácticos con Windows PowerShell 5.1

Ping sencillo a un equipo remoto con salida Win32_PingStatus:

Test-Connection -ComputerName Server01

Ping a varios servidores desde el equipo local:

Test-Connection -ComputerName Server01, Server02, Server12

Ping a un destino desde varios orígenes con credenciales para comparar latencias:

Test-Connection -Source Server02, Server12, localhost -ComputerName Server01 -Credential (Get-Credential)

Personalizar intentos, TTL, búfer y concurrencia en redes extensas:

Test-Connection -ComputerName Server01 -Count 3 -Delay 2 -TTL 255 -BufferSize 256 -ThrottleLimit 32

Ejecutar como trabajo en segundo plano y recoger resultados cuando termine:

$job = Test-Connection -ComputerName (Get-Content 'Servers.txt') -AsJob
if ($job.JobStateInfo.State -ne 'Running') {
  $results = Receive-Job $job
}

Ping con credenciales y suplantación ajustando el nivel de impersonation:

Test-Connection Server55 -Credential (Get-Credential) -Impersonation Identify

Usar salida booleana para decisiones rápidas en scripts:

if (Test-Connection -ComputerName Server01 -Quiet) { New-PSSession Server01 }

Entradas y salidas del cmdlet

Entradas: en la versión moderna, no se canalizan objetos directamente al cmdlet; se aceptan valores por parámetro estándar (TargetName admite canalización por valor o por nombre de propiedad).

  Cómo restablecer el PIN en Roblox si lo has olvidado

Salidas en PowerShell 6/7:

  • Microsoft.PowerShell.Commands.TestConnectionCommand+PingStatus: un objeto por cada respuesta ICMP.
  • Microsoft.PowerShell.Commands.TestConnectionCommand+TraceStatus: un objeto por salto con -Traceroute.
  • Microsoft.PowerShell.Commands.TestConnectionCommand+PingMtuStatus: con -MtuSize para Path MTU.
  • Boolean: con -Quiet o -TcpPort (matrices si hay múltiples destinos).
  • Microsoft.PowerShell.Commands.TestConnectionCommand+TcpPortStatus: con -Detailed para TCP en 7.4.

Salidas en Windows PowerShell 5.1:

  • ManagementObject (Win32_PingStatus): por cada eco.
  • Boolean: cuando se usa -Quiet.
  • System.Management.Automation.RemotingJob: si se ejecuta con -AsJob.

Notas y particularidades multiplataforma

Linux y permisos: al usar -BufferSize distinto de 32 o combinaciones con -MtuSize que cambian el tamaño por defecto, puede requerirse sudo. En ese caso, el cmdlet lanza una excepción indicando que se necesitan privilegios.

Quiet y manejo de errores: -Quiet devuelve booleanos y suprime errores; recuerda que con varios destinos la salida es una matriz de valores en orden de evaluación.

Repeat vs Count: no mezcles -Repeat con -Count en ping; -Repeat ignora destinos adicionales y solo itera sobre el primero. Para múltiples destinos con repetición, invoca el cmdlet por cada uno.

Resolver nombres: -ResolveDestination añade resolución DNS del destino y, con -Traceroute, intenta resolver cada salto; útil para mapear dispositivos intermedios.

Compatibilidad: si tu script debe funcionar en Windows PowerShell 5.1 y PowerShell 6/7, detecta la versión y usa -ComputerName o -TargetName según corresponda, y ajusta la interpretación de la salida.

Test-Connection y su relación con Test-NetConnection

Antes de Test-NetConnection, se combinaban utilidades como ping, tracert, nslookup o telnet para diagnosticar conectividad. Con PowerShell v4 llegó Test-NetConnection, que centraliza pruebas ICMP y TCP e incluso traza rutas con un solo cmdlet.

Aun así, Test-Connection cubre escenarios profundos con objetos más específicos para ICMP, MTU, traceroute y pruebas TCP modernas. Puedes complementarlo con Test-NetConnection cuando necesites un chequeo rápido todo-en-uno.

Ejemplos de Test-NetConnection para comparar comportamientos:

# Chequeo general con más detalle
Test-NetConnection -InformationLevel Detailed

# Comprobar resolución y ruta hacia un host
Test-NetConnection -ComputerName google.com
Test-NetConnection -ComputerName google.com -TraceRoute

# Verificar un puerto TCP conocido
Test-NetConnection -ComputerName google.com -CommonTCPPort HTTP

# Especificar un puerto concreto
Test-NetConnection -ComputerName google.com -Port 80

En escenarios donde telnet ya no está presente por defecto, estos cmdlets de PowerShell simplifican la verificación de puertos TCP y conectividad ICMP, añadiendo metadatos útiles como interfaz de salida o dirección de origen.

priorizar una conexión de red en windows 11-6
Artículo relacionado:
Cómo priorizar una conexión de red en Windows 11: guía completa y paso a paso

Deja un comentario