
Necesito escanear varios sistemas en la red dentro del rango de IP 172.18.xx a 172.25.xx y verificar si cada uno de ellos está activo o no, y luego volcar el resultado en un archivo. El siguiente es el guión:
@echo off
for /L %%x in (18,1,25) do (
for /L %%y in (1,1,254) do (
for /L %%z in (1,1,254) do (
ping -n 1 172.%%x.%%y.%%z | find "Reply" > NUL
IF NOT ERRORLEVEL 1 (set state=UP) ELSE (set state=DOWN)
echo 172.%%x.%%y.%%z is %state% >> state.txt
)))
Pero el resultado concluye que todos los sistemas están "ARRIBA" incluso aunque algunas direcciones IP no se utilicen.
¿Algún problema con el guión?
Respuesta1
El problema en su secuencia de comandos era algo muy extraño relacionado con las secuencias de comandos por lotes. Para que las variables de entorno se actualicen dentro de un IF o FOR, debe usar setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
y !var!
. Si tiene curiosidad, lo absurdo (¿qué sucede si no incluye esa línea setlocal con !var!) se explica más detalladamente en set /?
.
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
for /L %%x in (18,1,25) do (
for /L %%y in (1,1,254) do (
for /L %%z in (1,1,254) do (
ping -n 1 172.%%x.%%y.%%z | find "Reply" > NUL
IF NOT ERRORLEVEL 1 (set state=UP) ELSE (set state=DOWN)
echo 172.%%x.%%y.%%z is !state! >> state.txt
)))
Y si solo quieres los que están arriba. Prueba esto
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
for /L %%x in (18,1,25) do (
for /L %%y in (1,1,254) do (
for /L %%z in (1,1,254) do (
ping -n 1 -w 1000 172.%%x.%%y.%%z | find "Reply" > NUL
IF NOT ERRORLEVEL 1 (
set state=UP
echo 172.%%x.%%y.%%z is !state! >> state.txt
) ELSE (
set state=DOWN
)
)))
Respuesta2
yo sugieroespecias(Sugiero esto después de ver tu preguntahttps://networkengineering.stackexchange.com/questions/6993/tool-or-script-for-collecting-network-inventory). Todos los detalles que necesita están disponibles con la herramienta de inventario Spiceworks. Se adapta mejor a Windows AD, pero también se puede hacer de cualquier manera.
Respuesta3
No sé cuántos sistemas tienes que verificar. Encontré una solución correcta.aquí.. Si te resulta fácil hacer esto, acepta esta respuesta...
For /f %%i in (testservers.txt) do ping -n 1 %%i >>state.txt
**incluye todas las IP en testervers.txt
Respuesta4
Yo usaría una herramienta comoEscáner IP enojadopara hacer este trabajo. Crear secuencias de comandos parece inútil cuando existen tantas otras herramientas que pueden hacer exactamente lo mismo.