PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bat mit ping und auslesen



TheGuardian
07.09.2007, 18:00
also...
Ich möchte gerne eine batchdatei haben, die erst einen ping an einen PC sendet...



ping {domainname}

ok, das geht ja...

aber wie kann ich dann den ping auswerten?



if
echo=


geht das?
will das der wenn ein ping zurückkommt der Netzwerk PC heruntergefahren wird, wenn kein Ping kommt, dann der Teil übersprungen wird???

Wäre nett wenn mir jmd hilft!!!

f!l3st0rm
07.09.2007, 18:05
ping 127.0.0.1
echo %ERRORLEVEL%


ping notexist
echo %ERRORLEVEL%


Ich versteh zwar nicht ganz worauf Du hinaus willst, erinnere mich aber auf Wikipedia mal einen Artikel zu "Batch" "Ping"... gesehen zu haben.
(unter Wikipedia Batchprogrammierung).


if not %errorlevel% gtr 0 shutdown \\ usw.

rob00n
07.09.2007, 18:07
Meinst die vielleicht die Wikibooks zum Thema Batchprogrammierung (http://de.wikibooks.org/wiki/Batch-Programmierung)?

f!l3st0rm
07.09.2007, 18:08
Ja genau, da gabs den Source zur Übrprüfung ob der Server noch lebt^^


@echo off

:: wenn kein remote Host angegeben ist, dann gehe zu :Syntax
IF [%1]==[] GOTO Syntax
IF [%1]==[/?] GOTO Syntax
IF [%1]==[/h] GOTO Syntax
IF [%1]==[/help] GOTO Syntax

:mainloop
:: pinge den Host 1 mal und leite die Ausgabe nach 'nul' um (keine sichtbare Ausgabe)
ping %1 -n 1 >nul

:: speichere den Errorlevel in die Variable 'status'
set status=%errorlevel%

:: sende eine Nachricht an den lokalen Coputer falls der remote Host online ist
if %status%==0 (net send %computername% %1 online && exit 0)

:: minimalistische Fortschrittsanzeige
(Set /P i=.) < NUL

:: sleep workaround (wer eine bessere, einfachere, genauere & universellere Möglichkeit kennt bitte korrigieren)
:: pinge den lokalen Computer 10 mal
ping localhost -n 10 >nul

:: gehe zurück zum anfang
goto mainloop

:Syntax
echo.
echo Syntax: %~n0 [Hostname oder IP]
echo.
echo mping
echo.
echo Pingt einen offline Host und gibt eine Meldung
echo aus, sobald er wieder online ist
echo.

Ich denk damit kann mar abeiten.

TheGuardian
08.09.2007, 11:42
Also...
Ich erklär mal die situation...

Wir haben in einem Netzwerk 20 PCs... Wenn wir nun eine Batchdatei schreiben in der alle PCs einzeln heruntergefahren werden, dann arbeitet er alle 20 PCs ab... Wenn nun aber 5 PCs aus sind, dann braucht er immer ein timeout von 30 sekunden bis er den nächsten versucht herunterzufahren... Wenn ich nun also ein script habe, das entweder alle PCs gleichzeitig herunterfährt, oder nur versucht die PCs herunterzufahren wenn sichergestellt ist das der PC an ist, dann dauert es nicht mehr so lange zwischen den einzel-pcs...

In Hope

TheGuardian

f!l3st0rm
08.09.2007, 11:56
Ich versteh nicht ganz wo das Problem ist (die vorigen Codes müsste man nur minimal umschreiben).

Ich versuchs zu erklären:


ping [Dein Netzwerk PC]
sendet einen Ping zum angegebenen PC.


echo %ERRORLEVEL%
Gibt den ERRORLEVEL zurück. Bei erfolg ist dieser = 0, wenn etwas schief läuft ist er > 0.

Also machst Du eine if-Abfrage, welche bei größerem ERRORLEVEL den Teil des Herunterfahrens überspringt, wenn = 0, dann aber herunterfährt.


if "%ERRORLEVEL%" == "0" call :HERUNTERFAHREN


:HERUNTERFAHREN
shutdown -m \\Remote_PC -s -t 00
goto :EOF

nach


goto :EOF

geht's weiter mit dem nächsten Ping.


Eine Sache die auch noch eine Rolle spielt, welche CMD Version hast DU... welche OS... sind im Netzwerk?

Timouts wurden ca. 4 Posts drunter diskutiert:
http://www.free-hack.com/viewtopic.php?t=32884

TheGuardian
08.09.2007, 19:02
alles nur Windoof XP