lunes, 28 de noviembre de 2022

PowerShell - Script para verificar la conectividad de una lista de equipos

Verificar la conectividad entre equipos se puede convertir en una tarea bastante tediosa cuando la lista  y/o puertos a verificar es grande y tenemos que hacer las comprobaciones de forma manual. Para facilitarlo, a continuación se presenta un script PowerShell que nos permitirá automatizar la tarea de verificar la conectividad de N servidores a través de una lista de puertos.

Los servidores se listarán en un fichero de texto plano, para el ejemplo lo nombraremos como Targets.txt. separados por saltos de línea: 

servidor01
servidor02
servidor03
... 

Siguiendo el mismo formato los puertos se informarán en otro fichero de texto plano, que para el ejemplo nombraremos como Ports.txt, separados por saltos de línea:

port01
port02
port03
...
 
Creamos el siguiente PowerShell Script, que en mi caso he guardado con el nombre checkconnections.ps1, que tendrá como parámetros de entrada los ficheros con la lista de servidores y puertos:

param (
   
    [string]$targetsFile,
    [string]$portsFile
   
)

$targets = Get-Content -Path $targetsFile
$ports = Get-Content -Path $portsFile

ForEach ($target in $targets){

    foreach ($port in $ports){
        Test-NetConnection -ComputerName $target -Port $port
    }

}


Ejecutamos el script mediante el siguiente comando:

.\checkconnections.ps1 -targetsFile Targets.txt -portsFile Ports.txt 
 
Que nos devolverá el resultado de verificar la conectividad de los servidores listados en Targets.txt contra los puertos presentes en Ports.txt.

ComputerName           : servidor01
RemoteAddress          : 10.136.36.71
RemotePort             : port01
InterfaceAlias         : Ethernet
SourceAddress          : 10.136.36.94
PingSucceeded          : True
PingReplyDetails (RTT) : 1 ms
TcpTestSucceeded       : True

ComputerName           : servidor01
RemoteAddress          : 10.136.36.71
RemotePort             : Port02
InterfaceAlias         : Ethernet
SourceAddress          : 10.136.36.94
PingSucceeded          : True
PingReplyDetails (RTT) : 1 ms
TcpTestSucceeded       : False

ComputerName           : servidor01
RemoteAddress          : 10.136.36.71
RemotePort             : Port03
InterfaceAlias         : Ethernet
SourceAddress          : 10.136.36.94
PingSucceeded          : True
PingReplyDetails (RTT) : 1 ms
TcpTestSucceeded       : False

ComputerName           : servidor02
RemoteAddress          : 10.136.36.72
RemotePort             : Port01
InterfaceAlias         : Ethernet
SourceAddress          : 10.136.36.94
PingSucceeded          : True
PingReplyDetails (RTT) : 1 ms
TcpTestSucceeded       : True

...