Prueba de conexión de PowerShell: la prueba moderna de ping

El cmdlet del día de hoy es PowerShell Test-Connection. Test-Connection es un cmdlet que, como era de esperar, prueba la conexión de red. Piense en Test-Connection como la implementación de PowerShell de la popular utilidad ping. Aunque ambos tienen ICMP en común, verá que los dos métodos son un poco diferentes internamente.

Usar este cmdlet es simple. En su forma más básica, solo especifique un parámetro ComputerName y enviará cuatro solicitudes ICMP al host de destino.

PS> Test-Connection -ComputerName google.com
Source        Destination     IPV4Address      IPV6Address                              Bytes    Time(ms)
------        -----------     -----------      -----------                              -----    --------
MACWINVM      google.com      172.217.0.14     2607:f8b0:4009:80c::200e                 32       47
MACWINVM      google.com      172.217.0.14     2607:f8b0:4009:80c::200e                 32       90
MACWINVM      google.com      172.217.0.14     2607:f8b0:4009:80c::200e                 32       88
MACWINVM      google.com      172.217.0.14     2607:f8b0:4009:80c::200e                 32       205

Esta salida se parece a ping.exe y, en apariencia, lo es, pero test-connection de Powershell emite la solicitud ICMP de manera un poco diferente. A diferencia de ping.exe, Test-Connection utiliza la clase WMI Win32_PingStatus de la computadora local para enviar la solicitud ICMP. Utilizar el repositorio WMI local significa que debe asegurarse de que su repositorio WMI local esté en buen estado, de lo contrario, Test-Connection no funcionará.

Salida de objetos de PowerShell Test-Connection

Además, como ocurre con la belleza de PowerShell, este cmdlet no devuelve simplemente lo que aparece en la consola. Vemos objetos ricos de los que podemos obtener más información.

Si asigno la salida a una variable y luego reviso las propiedades, puedo ver que he recopilado mucha más información útil.

PS> $pingResults | Get-Member
TypeName: System.Management.ManagementObject#root\cimv2\Win32_PingStatus
Name                           MemberType     Definition
----                           ----------     ----------
PSComputerName                 AliasProperty  PSComputerName = __SERVER
Address                        Property       string Address {get;set;}
BufferSize                     Property       uint32 BufferSize {get;set;}
NoFragmentation                Property       bool NoFragmentation {get;set;}
PrimaryAddressResolutionStatus Property       uint32
PrimaryAddressResolutionStatus {get;set;}
ProtocolAddress                Property       string ProtocolAddress {get;set;}
ProtocolAddressResolved        Property       string
ProtocolAddressResolved {get;set;}
RecordRoute                    Property       uint32 RecordRoute {get;set;}
ReplyInconsistency             Property       bool ReplyInconsistency {get;set;}
ReplySize                      Property       uint32 ReplySize {get;set;}
ResolveAddressNames            Property       bool ResolveAddressNames {get;set;}
ResponseTime                   Property       uint32 ResponseTime {get;set;}
ResponseTimeToLive             Property       uint32 ResponseTimeToLive {get;set;}
RouteRecord                    Property       string[] RouteRecord {get;set;}
RouteRecordResolved            Property       string[] RouteRecordResolved {get;set;}
SourceRoute                    Property       string SourceRoute {get;set;}
SourceRouteType                Property       uint32 SourceRouteType {get;set;}
StatusCode                     Property       uint32 StatusCode {get;set;}
Timeout                        Property       uint32 Timeout {get;set;}
TimeStampRecord                Property       uint32[] TimeStampRecord {get;set;}
TimeStampRecordAddress         Property       string[] TimeStampRecordAddress {get;set;} TimeStampRecordAddressResolved Property       string[]
TimeStampRecordAddressResolved {get;set;}
TimestampRoute                 Property       uint32 TimestampRoute {get;set;}
<SNIP>

Si estás probando hosts internos, Test-Connection utilizará DCOM para autenticarse en hosts remotos. De forma predeterminada, utilizará autenticación de DCOM a nivel de paquete, pero el tipo de autenticación siempre se puede cambiar con el parámetro DcomAuthentication.

Usando trabajos en segundo plano

Este cmdlet también se puede ejecutar como un trabajo en segundo plano. Los trabajos en segundo plano son útiles si tienes muchos equipos remotos para hacer ping y en lugar de esperar para siempre a los que eventualmente agotarán el tiempo, simplemente envíalo a un trabajo en segundo plano.

Según la ayuda de PowerShell para las conexiones de prueba de PowerShell, dice que la comunicación remota de PowerShell debe estar habilitada tanto en los equipos locales como remotos, pero esto no es cierto. Como puedes ver a continuación, estoy probando google.com, y el comando sigue funcionando perfectamente.

Test-Connection -AsJob -ComputerName google.com
Get-Job | Receive-Job

Manteniéndolo simple

Finalmente, si solo estás buscando una respuesta binaria sí/no sobre si un equipo está respondiendo o no, siempre puedes usar el parámetro Quiet. Una cadena común que siempre uso para ver rápidamente si un servidor está en línea o no es usar Quiet y Count de 1 para forzar a Test-Connection a enviar una sola solicitud ICMP.

PS> Test-Connection -ComputerName google.com -Quiet -Count 1
True

¡Eso es todo para nuestro cmdlet del día! Cubrimos la mayoría de lo que es posible con Test-Connection de PowerShell, pero, como siempre, consulta el contenido de ayuda de PowerShell o ve a la documentación de Microsoft para obtener un desglose completo.

Source:
https://adamtheautomator.com/powershell-test-connection/