miércoles, 23 de septiembre de 2015

Ping a toda una red en PowerShell

En una entrada anterior mostré como hacer ping a toda una red en una sola línea con el interprete de comandos CMD de Windows. El tiempo ha pasado y es hora de mudar las tareas diarias a PowerShell, así que aquí va el fragmento de código que te permite pinguear a toda una red:

for ($i=2;$i -le 254;$i++) {
$ip='192.168.0.' + $i;
if(Test-Connection $ip -Count 1 -Quiet) { Out-File C:\PING\ping.txt -InputObject $ip -Append }
}

Vamos por parte dijo Jack.
La primer línea:

for ($i=2;$i -le 254;$i++) {

Genera un bucle en el cual la variable $i tomará los valores del 2 al 254.
Luego generamos la ip a pinguear en una variable $ip, aquí ponen el prefijo de la red que quieren pinguear:

$ip='192.168.0.' + $i;

Finalmente utilizamos un if cuya condición es el resultado de invocar al cmdlet Test-Connection con los paremetros -Count 1 para que pinguee con solo un paquete y -Quiet que hace que el cmdlet devuelva True si la ip pinguea y false en caso contrario.

La acción a realizar en caso que la ip pinguee es guardar el contenido de la variable $ip en el archivo C:\PING\ping.txt con el cmdlet Out-File (con el parámetro -Append para que guarde todas las ips).

if(Test-Connection $ip -Count 1 -Quiet) { Out-File C:\PING\ping.txt -InputObject $ip -Append }

Con esto el archivo ping.txt tendrá todas las ips que pinguearon. Esto lo podemos ejecutar desde una consola de powershell, desde el ISE, invocando powershell desde una tarea programada, etc.

No hay comentarios: