una lista hacer gui descargar batch-file ping

batch file - lista - ¿Cómo hacer ping a varios servidores y devolver la dirección IP y los nombres de host usando el script por lotes?



descargar ping gui (7)

El análisis pingtest.txt para cada nombre HOST y resultado con lote es difícil porque el nombre y el resultado se encuentran en líneas diferentes.

Es mucho más fácil probar el resultado (el código de error devuelto) de cada comando PING directamente en lugar de redirigir a un archivo. También es más eficiente encerrar todo el constructo en parens y redirigir el resultado final solo una vez.

>result.txt ( for /f %%i in (testservers.txt) do ping -n 1 %%i >nul && echo %%i UP||echo %%i DOWN )

Así que tengo que usar lotes solo para esto. Básicamente, los HOSTNAMES del servidor están listados en un archivo txt. Usé el siguiente código para hacer ping a todos los servidores y mostrar sus resultados en un archivo txt.

For /f %%i in (testservers.txt) do ping -n 1 %%i >>pingtest.txt

Lo anterior conectó con todos los servidores. Ahora, quiero dar salida a las direcciones IP y los nombres HOST en un archivo separado. ¿Cómo puedo hacer esto? Sé que puedo ejecutar un bucle for buscando palabras como "TTL" y luego buscar el 3er token (para el IP) y palabras como "PINGING" para el segundo token (HOSTNAME). Pero estoy teniendo errores y no puedo mostrarlos correctamente. La razón por la que deseo exportar direcciones IP y nombres de host en un archivo diferente es hacer una lista de los servidores DOWN y UP.

La ayuda será apreciada. :)

EDITAR: para que no sea confuso, quería dejarles saber que hay 3 archivos diferentes, testservers.txt tiene los HOSTNAMES, pingtest.txt tiene resultados de ping, y result.txt tendrá las direcciones IP junto con los nombres de host con su estado actual como DOWN o UP.


El problema con el ping es que si el host no está vivo, a menudo su máquina local responderá que el host con pin no está disponible, por lo que el código de error de ping será 0 y su código se ejecutará con error porque no reconoce el estado inactivo.

mejor hazlo de esta manera

ping -n 4 %1 | findstr TTL if %errorlevel%==0 (goto :eof) else (goto :error)

de esta manera se busca una ttl de cadena típica que siempre está en el resultado de ping bien hecho y el error de verificación en este findtr en lugar de ping irritante

En general, esto se ve así:

@echo off SetLocal set log=path/to/logfile.txt set check=path/to/checkfile.txt :start echo. some echo date >>%log% :check for /f %%r in (%check%) do (call :ping %%r) goto :eof :ping ping -n 4 %1 | findstr TTL if %errorlevel%==0 (goto :eof) else (goto :error) :error echo. some errormessage to >>%log% echo. some blat to mail? :eof echo. some good message to >>%log%


Prueba esto

$servers = Get-Content test.txt $reg="" foreach ($server in $servers) { $reg=$reg+$server+"`t"+([System.Net.Dns]::GetHostAddresses($server) | foreach {echo $_.IPAddressToString})+"`n" } $reg >reg.csv


Trabajé en el código proporcionado anteriormente por Eitan-T y volví a trabajar para generar un archivo CSV. Encontré que los resultados en el código anterior no siempre daban los valores correctos así que lo he mejorado.

testservers.txt

SOMESERVER DUDSERVER

results.csv

HOSTNAME LONGNAME IPADDRESS STATE SOMESERVER SOMESERVER.DOMAIN.SUF 10.1.1.1 UP DUDSERVER UNRESOLVED UNRESOLVED DOWN

pingtest.bat

@echo off setlocal enabledelayedexpansion set OUTPUT_FILE=result.csv >nul copy nul %OUTPUT_FILE% echo HOSTNAME,LONGNAME,IPADDRESS,STATE >%OUTPUT_FILE% for /f %%i in (testservers.txt) do ( set SERVER_ADDRESS_I=UNRESOLVED set SERVER_ADDRESS_L=UNRESOLVED for /f "tokens=1,2,3" %%x in (''ping -n 1 %%i ^&^& echo SERVER_IS_UP'') do ( if %%x==Pinging set SERVER_ADDRESS_L=%%y if %%x==Pinging set SERVER_ADDRESS_I=%%z if %%x==SERVER_IS_UP (set SERVER_STATE=UP) else (set SERVER_STATE=DOWN) ) echo %%i [!SERVER_ADDRESS_L::=!] !SERVER_ADDRESS_I::=! is !SERVER_STATE! echo %%i,!SERVER_ADDRESS_L::=!,!SERVER_ADDRESS_I::=!,!SERVER_STATE! >>%OUTPUT_FILE% )


Bueno, es lamentable que no publicaras tu propio código también, para que pueda ser corregido.
De todos modos, aquí está mi propia solución a esto:

@echo off setlocal enabledelayedexpansion set OUTPUT_FILE=result.txt >nul copy nul %OUTPUT_FILE% for /f %%i in (testservers.txt) do ( set SERVER_ADDRESS=ADDRESS N/A for /f "tokens=1,2,3" %%x in (''ping -n 1 %%i ^&^& echo SERVER_IS_UP'') do ( if %%x==Pinging set SERVER_ADDRESS=%%y if %%x==Reply set SERVER_ADDRESS=%%z if %%x==SERVER_IS_UP (set SERVER_STATE=UP) else (set SERVER_STATE=DOWN) ) echo %%i [!SERVER_ADDRESS::=!] is !SERVER_STATE! >>%OUTPUT_FILE% )

El bucle externo itera a través de los hosts y el bucle interno analiza la salida de ping . Las dos primeras sentencias if manejan los dos posibles casos de resolución de la dirección IP:

  1. El nombre de host es la dirección IP del host.
  2. La dirección IP del host se puede resolver a partir de su nombre.

Si la dirección IP del host no se puede resolver, la dirección se establece en "DIRECCIÓN N / A".

Espero que esto ayude.


@echo off

set workdir = {su directorio de trabajo. por ejemplo, C: / work} set iplist =% workdir% / IP-list.txt

setlocal enabledelayedexpansion set OUTPUT_FILE=%workdir%/result.csv >nul copy nul %OUTPUT_FILE% echo HOSTNAME,LONGNAME,IPADDRESS,STATE >%OUTPUT_FILE% for /f %%i in (%iplist%) do ( set SERVER_ADDRESS_I=UNRESOLVED set SERVER_ADDRESS_L=UNRESOLVED for /f "tokens=1,2,3" %%x in (''ping -a -n 1 %%i ^&^& echo SERVER_IS_UP'') do ( if %%x==Pinging set SERVER_ADDRESS_L=%%y if %%x==Pinging set SERVER_ADDRESS_I=%%z if %%x==SERVER_IS_UP (set SERVER_STATE=UP) else (set SERVER_STATE=DOWN) ) echo %%i [!SERVER_ADDRESS_L::=!] !SERVER_ADDRESS_I::=! is !SERVER_STATE! echo %%i,!SERVER_ADDRESS_L::=!,!SERVER_ADDRESS_I::=!,!SERVER_STATE! >>%OUTPUT_FILE% )


Esto funcionó muy bien, solo agregué la opción -a para hacer ping para resolver el nombre de host. Gracias https://.com/users/4447323/wombat

@echo off setlocal enabledelayedexpansion set OUTPUT_FILE = result.csv

>nul copy nul %OUTPUT_FILE% echo HOSTNAME,LONGNAME,IPADDRESS,STATE >%OUTPUT_FILE% for /f %%i in (testservers.txt) do ( set SERVER_ADDRESS_I=UNRESOLVED set SERVER_ADDRESS_L=UNRESOLVED for /f "tokens=1,2,3" %%x in (''ping -n 1 -a %%i ^&^& echo SERVER_IS_UP'') do ( if %%x==Pinging set SERVER_ADDRESS_L=%%y if %%x==Pinging set SERVER_ADDRESS_I=%%z if %%x==SERVER_IS_UP (set SERVER_STATE=UP) else (set SERVER_STATE=DOWN) ) echo %%i [!SERVER_ADDRESS_L::=!] !SERVER_ADDRESS_I::=! is !SERVER_STATE! echo %%i,!SERVER_ADDRESS_L::=!,!SERVER_ADDRESS_I::=!,!SERVER_STATE! >>%OUTPUT_FILE% )