[Scripting] Batch file met ping voor systemen up & running

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Borrelnootje11
  • Registratie: November 2004
  • Laatst online: 07:04
Om te kijken of de systemen up zijn wil ik het volgende script uitvoeren.
Dit gaat goed maar werkt maar voor 1 ip adres.

Nu wilde ik met een "FOR" erin het script herhalen voor een range ip adressen.
Maar dit werkt niet. Het %ERRORLEVEL% is dan altijd 0, dus offline.

voor het eerste script had ik gevonden dat er na het ipadres een spatie en dan een 2 moet staan om het door te pipen naar de find opdracht.

@echo off
CLS

ping -n 1 10.1.10.160 2>NUL | find "Time-out bij opdracht.">NUL
if "%ERRORLEVEL%"=="0" (echo OFFLINE) else (echo ONLINE)

pause



@echo off
CLS
FOR /L %%a in (160,1,170) do (
ping -n 1 10.1.10.%%a | find "Time-out bij opdracht.">NUL
if "%ERRORLEVEL%"=="0" (echo OFFLINE) else (echo OK)
)
pause


Iemand een idee.
Of een betere oplossing :)

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Werkt hier vanuit de cmd prima. Tenminste: ik krijg juist een errorlevel 1, maar als ik het aanpas naar

ping -n 1 10.1.10.160 2>NUL | find "niet">NUL
if "%ERRORLEVEL%"=="0" (echo 160 OFFLINE) else (echo 160 ONLINE)
ping -n 1 tweakers.net 2>NUL | find "niet">NUL
if "%ERRORLEVEL%"=="0" (echo tweakers OFFLINE) else (echo tweakers ONLINE)

geeft hier precies het juiste resultaat (160 offline, tnet online).

Er zijn immers andere foutmeldingen mogelijk, zoals 'Het doelnetwerk is niet bereikbaar' en andere talen. Daar zal je ook rekening mee moeten houden.

Ik zou overigens aanraden om geen batch meer te gebruiken maar bijv powershell. In de FOR loop wil je overigens niet vergeten het IP-adres te noemen van de machines. (En eventueel ook alleen de offline machines noemen).

Edit:
Ah wacht, dat bedoel je. Zet de ping in een tweede batch en roep die aan. Dus:

FOR /L %%a in (1,1,5) do (call b %%a)

en b.cmd:
ping -n 1 10.0.0.%1  2>NUL | find "niet">NUL
if "%ERRORLEVEL%"=="0" (echo %1 OFFLINE) else (echo %1 OK)

Maar zie mijn eerdere opmerking over modernere scripttalen.

[ Voor 17% gewijzigd door F_J_K op 02-05-2012 13:03 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • Borrelnootje11
  • Registratie: November 2004
  • Laatst online: 07:04
F_J_K schreef op woensdag 02 mei 2012 @ 12:54:
Werkt hier vanuit de cmd prima. Tenminste: ik krijg juist een errorlevel 1, maar als ik het aanpas naar

ping -n 1 10.1.10.160 2>NUL | find "niet">NUL
if "%ERRORLEVEL%"=="0" (echo 160 OFFLINE) else (echo 160 ONLINE)
ping -n 1 tweakers.net 2>NUL | find "niet">NUL
if "%ERRORLEVEL%"=="0" (echo tweakers OFFLINE) else (echo tweakers ONLINE)

geeft hier precies het juiste resultaat (160 offline, tnet online).

Er zijn immers andere foutmeldingen mogelijk, zoals 'Het doelnetwerk is niet bereikbaar' en andere talen. Daar zal je ook rekening mee moeten houden.

Ik zou overigens aanraden om geen batch meer te gebruiken maar bijv powershell. In de FOR loop wil je overigens niet vergeten het IP-adres te noemen van de machines. (En eventueel ook alleen de offline machines noemen).

Edit:
Ah wacht, dat bedoel je. Zet de ping in een tweede batch en roep die aan. Dus:

FOR /L %%a in (1,1,5) do (call b %%a)

en b.cmd:
ping -n 1 10.0.0.%1  2>NUL | find "niet">NUL
if "%ERRORLEVEL%"=="0" (echo %1 OFFLINE) else (echo %1 OK)

Maar zie mijn eerdere opmerking over modernere scripttalen.
toon volledige bericht
Word tijd om mezelf te verdiepen in modernere scripttalen.

Dit ken ik nog van een oud project, dus probeerde het hiermee.
En met meerdere batchbestandenen lukt het wel d:)b

Maar weet nog niet waar dat getal "2" voor nodig is voordat je het naar NUL schrijft en dan doorpiped naar het find commando.

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

2> heeft te maken met stdout versus stderr: 1 is de standaardoutput routeren als error, 2 is de error output routeren als standaard. IIRC :P

Edit: Wikipedia: Redirection (computing) dus.

[ Voor 29% gewijzigd door F_J_K op 02-05-2012 14:09 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • Borrelnootje11
  • Registratie: November 2004
  • Laatst online: 07:04
F_J_K schreef op woensdag 02 mei 2012 @ 14:05:
2> heeft te maken met stdout versus stderr: 1 is de standaardoutput routeren als error, 2 is de error output routeren als standaard. IIRC :P

Edit: Wikipedia: Redirection (computing) dus.
Ja, is weer duidelijk.
Thnx voor de extra info. :)