Batch-Skript auf server 2008 - Wenn Ping erfolgreich, dann
Ich bin versucht, ein Skript schreiben, das überprüft, um zu sehen, wenn ein computer in meinem LAN laufen, bevor der rest von meinem Skript. Es ist ein einfaches backup-Skript mit robocopy aber ich möchte, dass es eine Datei ausgegeben, abhängig davon, ob es erfolgreich war oder nicht.
Dies ist, was ich habe.
set machine=userbox
ping -n 1 %machine% > nul
if errorlevel 1 goto BAD
goto GOOD
:GOOD
robocopy source destination
echo "backup complete" > c:\scripts\backupgood-%machine%.log
shutdown /s /m \\%machine% /t 600
goto END
:BAD
echo "Computer not on" > c:\scripts\%machine%-offline.log
:END
Jetzt das Skript ist nicht zu erkennen, ob das system eingeschaltet ist oder nicht, und es ist vorausgesetzt, es ist auf und setzt sich mit dem Skript als wenn die Maschine in der Lage war, die gepingt wird.
Kann jemand darauf hin, warum der Fehler nicht passieren oder vielleicht hat ja jemand eine bessere Möglichkeit zu bestimmen, ob ein system online ist.
Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das "problem" mit deinem code ist das management der
errorlevel
um festzustellen, ob die Maschine steht oder nicht online.Die Fragen sind: wie funktioniert
ping
Verhalten?, Wann isterrorlevel
gesetzt?Wenn wir arbeiten mit ipv6, die Regeln sind
errorlevel
wird gesetzt, wenn keine Antwort für alle gesendeten Pakete (alle Pakete verloren)errorlevel
ist nicht festgelegt, wenn es eine Antwort auf die gesendeten Paketeipv6 hat ein konsequentes Verhalten und überprüfung der errorlevel ist eine zuverlässige Möglichkeit zu wissen, wenn die Maschine online ist.
In ipv4 sind die Regeln anders
errorlevel
wird gesetzt, wenn dort ist keine Antwort auf mindestens eine der gesendeten Paketeerrorlevel
ist nicht festgelegt, wenn es eine Antwort für alle gesendeten Pakete (keine Päckchen verloren)Aber das pingen von einem nicht verfügbaren Rechner im gleichen Subnetz nicht einstellen
errorlevel
, erhalten Sie eine "nicht erreichbar" - Antwort, mitn packets sent, n packed received, 0 packets lost
alle Pakete erhalten eine Antwort aus der gleichen Maschine das versenden von Paketen.Dieses Verhalten in ipv4, wenn die Maschine im gleichen Subnetz-lässt den errorlevel-check fail.
Wie das problem zu lösen in ipv4?
Den Ausgang des
ping
Befehl kann überprüft werden, ob der stringTTL=
ist in der Ausgabe vorhanden, der Zielrechner ist online.Für eine "Allgemeine" Lösung (übernommen aus einer früheren Antwort) verwendet werden kann (scheint eine Menge code, aber Sie sind fast alle Kommentare)
Könnte man einfach prüfen, ob Ihre remote-Verzeichnis:
Dank an Euch beide. Ich versuchte beides, aber am Ende das ist was für mich gearbeitet
Cheers