Test-NetConnection – Ha aparecido un cmdlet listo para usar para comprobar la conexión de red en PowerShell 4.0 (Windows 2012 R2, Windows 8.1 y versiones posteriores). Puede usar este cmdlet para verificar la respuesta y disponibilidad de un servidor remoto o servicio de red en él, los puertos TCP bloqueados por firewalls, verificar la disponibilidad y el enrutamiento de ICMP. De hecho, el Test-NetConnection cmdlet puede reemplazar varias herramientas de administración de red estándar a la vez: ping, traceroute, escáner de puerto TCP, etc.
El principal beneficio del Test-NetConnection cmdlet es que ya forma parte de todas las versiones modernas de Windows y no es necesario instalarlo por separado. El cmdlet es parte del NetTCPIP módulo (comenzando con PoSh v4.0).
$PSVersionTable.PSVersion
El valor 4 en la columna Mayor significa que PowerShell 4.0 está instalado en su computadora.
Prueba de puertos TCP de servidor abiertos / cerrados con Test-NetConnection
Comprobemos si el puerto TCP 25 (protocolo SMTP) está abierto (disponible) en el servidor de correo electrónico remoto usando Test-NetConnection:
Test-NetConnection -ComputerName ny-msg01 -Port 25
Nota. Con el cmdlet Test-NetConnection, puede verificar solo la conexión del puerto TCP y no es aplicable verificar la disponibilidad de los puertos UDP remotos.
La versión abreviada del mismo comando se ve así: TNC ny-msg01 -Port 25
Consideremos el resultado del comando:
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
Como puede ver, el cmdlet resuelve el nombre del servidor en la dirección IP, verifica la respuesta ICMP (similar a ping) y la disponibilidad del puerto TCP. El servidor especificado responde a través de ICMP (PingSucceeded = True) y el puerto TCP 25 está abierto (RemotePort=25, TcpTestSucceeded= True).
Nota. En algunos casos, puede ocurrir que PingSucceeded = False y TcpTestSucceeded = True. Es probable que signifique que ICMP Ping está prohibido en el servidor remoto.
El cmdlet tiene un parámetro especial –CommonTCPPort, que le permite especificar el nombre de un protocolo de red conocido (HTTP, RDP, SMB, WINRM).
Por ejemplo, para verificar la disponibilidad de un servidor web HTTP, puede usar el comando:
Test-NetConnection -ComputerName woshub.com -CommonTCPPort HTTP
O disponibilidad del puerto RDP (3389):
Test-NetConnection ny-rds1 –CommonTCPPort RDP
Puede enumerar todos los parámetros que devuelve el cmdlet Test-NetConnection:
Test-NetConnection ny-man01 -port 445|Format-List *
Si solo necesita ver si el puerto está disponible, puede verificarlo más rápidamente:
TNC ny-msg1 -Port 25 -InformationLevel Quiet
El cmdlet regresó True, lo que significa que se puede acceder al puerto remoto.
![]()
(New-Object System.Net.Sockets.TcpClient).Connect(‘ny-msg01’, 25)

En Windows 10 / Windows Server 2016, puede usar el cmdlet Test-NetConnection para rastrear la ruta a un servidor remoto usando el –TraceRoute parámetro (análogo al comando tracert en Windows). Utilizando la –Hops parámetro, puede limitar el número máximo de esperanzas durante la verificación de ruta.
Test-NetConnection ny-man01 –TraceRoute
El cmdlet devolvió el retraso del resumen de red al acceder al servidor en milisegundos (PingReplyDetails (RTT): 41 ms) y todas las direcciones IP de los enrutadores en el camino hacia el servidor de destino.

Test-NetConnection en scripts de supervisión de PowerShell
El siguiente comando le permite verificar la disponibilidad de un puerto específico en varios servidores, cuya lista se almacena en un archivo de texto sin formato list_servers.txt. Necesitamos los servidores donde el servicio especificado no responde:
Get-Content c:PSlist_servers.txt | where { -NOT (Test-Netconnection $_ -Port 25 -InformationLevel Quiet)}| Format-Table -AutoSize
De manera similar, puede crear un script de monitoreo simple que verifique la disponibilidad de los servidores y muestre una notificación si uno de los servidores no está disponible.
Por ejemplo, puede verificar la disponibilidad de los servicios básicos en todos los controladores de dominio (se puede obtener una lista de DC con el cmdlet Get-ADDomainController). Comprobemos los siguientes servicios en DC (la herramienta PortQry tiene una regla similar de «Dominio y fideicomisos»):
- 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,isGlobalCatalog,Site,Forest,OperatingSystem
ForEach($DC in $AllDCs)
{
Foreach ($P in $Ports){
$check=Test-NetConnection $DC -Port $P -WarningAction SilentlyContinue
If ($check.tcpTestSucceeded -eq $true)
{Write-Host $DC.name $P -ForegroundColor Green -Separator " => "}
else
{Write-Host $DC.name $P -Separator " => " -ForegroundColor Red}
}
La secuencia de comandos verificará los puertos TCP especificados en los controladores de dominio y, si uno de los puertos no está disponible, lo resaltará en rojo (puede ejecutar esta secuencia de comandos de PowerShell como un servicio de Windows).

Escáner de puerto / red IP simple con PowerShell
También puede implementar un puerto simple y un escáner de red de subredes IP para escanear servidores remotos o subredes en busca de puertos TCP abiertos / cerrados.
Escanee el rango de direcciones IP en el puerto abierto 3389:
foreach ($ip in 100..150) {Test-NetConnection -Port 3389 -InformationLevel "Detailed" 192.168.1.$ip}
Escanee el rango de puertos TCP de 1 a 1024 en el servidor remoto especificado:
foreach ($port in 1..1024) {If (($a=Test-NetConnection srvfs01 -Port $port -WarningAction SilentlyContinue).tcpTestSucceeded -eq $true){ "TCP port $port is open!"}}






