Hilfe beim Herrunterfahren Skript
-
Da du anscheint nicht sehr viel vom programmieren verstehst
und ein Script erwähnst, sollte eine Batch hier angebracht sein.:start FOR /L %i IN (0,1,255) DO ping 168.192.1.%i & set /a Aus=%Aus%+%errorlevel% IF %Aus% NEQ 0 DO shutdown /s /t 00 goto :start
sollte funktionieren
hab's nicht getestet
ein Moderator sollte das Ganze hier vielleicht verschieben
-
irgendwer schrieb:
Da du anscheint nicht sehr viel vom programmieren verstehst
und ein Script erwähnst, sollte eine Batch hier angebracht sein.:start FOR /L %i IN (0,1,255) DO ping 168.192.1.%i & set /a Aus=%Aus%+%errorlevel% IF %Aus% NEQ 0 DO shutdown /s /t 00 goto :start
sollte funktionieren
hab's nicht getestet
ein Moderator sollte das Ganze hier vielleicht verschiebenHabe es auch nicht getestet, aber ein eventuelles Problem bei deiner Variante ist, dass sich der ausführende PC selber mit einbezieht. Und wenn er dieses Script ausführen kann, ist er natürlich auch erreichbar. Damit würde shutdown nie ausgeführt werden.
-
Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
BBBB schrieb:
Habe es auch nicht getestet, aber ein eventuelles Problem bei deiner Variante ist, dass sich der ausführende PC selber mit einbezieht. Und wenn er dieses Script ausführen kann, ist er natürlich auch erreichbar. Damit würde shutdown nie ausgeführt werden.
stimmt
aber dafür muss man nur die 0 in der IF Abfrage durch eine 1 ersetzenund was mir grade auffällt:
%i zu %%i ändern
und am Anfang ein setlocal einfügen damit %Aus% auf jeden Fall gelöscht wird
-
irgendwer schrieb:
Da du anscheint nicht sehr viel vom programmieren verstehst.
...
sollte funktionieren
hab's nicht getestetMein letzter Beitrag war wohl zu rüde und wurde liquidiert. Ich fand es nur sehr anmaßend dem Threadstarter mangelndes Programmierverständnis zu attestieren und dann mit so einer Lösung zu daherzukommen, bei der (fast) nichts stimmt.
Was soll die Zumüllung des Netzwerks?
Was bedeutet ping 192.168.1.0?
Wie soll %Aus% je 0 bleiben?Und dann noch die falsche Syntax.
Darauf wollte ich vorher nur kurz und prägnant hinweisen.
Hoffe dem allmächtigen volkard ist das jetzt nicht zu rüde.
-
irgendwer schrieb:
stimmt
aber dafür muss man nur die 0 in der IF Abfrage durch eine 1 ersetzenIch würde zuerst nochmal durchatmen und in Ruhe drübersehen. Denn das macht es auch nicht besser.
-
stimmt mein Lösungsvorschlag ist nicht ganz richtig
ok dann werde ich den mal verbessernsetlocal :start rem durch gehen aller lokalen IPs rem bei erfolg liefert ping 0 und bei Zeitüberschreitung/ungültig 1 FOR /L %%i IN (0,1,255) DO ping 168.192.1.%%i & set /a Aus+=%errorlevel% rem 2 IPs werden auf jeden Fall antworten rem der Router und der PC auf dem die .bat läuft rem 256-2=254 IF %Aus% EQU 254 DO shutdown /s /t 00 rem für jedes Gerät mit einer IP, das nicht beachtet werden soll die Zahl um 1 verringern rem falls ein PC noch an ist, nochmal testen goto :start
Und dann noch die falsche Syntax.
Wo war die Syntax falsch?
nur in einer .bat muss es %%i heißen, in der cmd wär das sogar ein fehler
Das FOR /L geht natürlich nur wenn man die Befehlszeilenerweiterungen (oder MS das nennt) einschaltet (bei XP Standart, Server 2003 müsste das auch haben)Threadstarter mangelndes Programmierverständnis zu attestieren
Ich seh rot wenn jemand scripten und programmieren synonym verwendet
Was bedeutet ping 192.168.1.0?
anpingen eines Gräts mit dieser IP
-
erstmal sorry für Doppelpost
Beim Testen hab ich erkannt, dass das %errorlevel% durch !errorlevel! ersetzt werden muss, damit errorlevel erst expandiert wird, wenn es gebraucht wird.
Sonst wird immer der errorlevel des letzten Befehls vor der FOR-Schleife benutztbei ping kann man noch mit den parameter -w ein Zeitlimit setzen, damit es schneller geht, oder den Bereich der IPs runtersetzen (dann aber auch den Wert beim IF ändern
-
irgendwer schrieb:
nur in einer .bat muss es %%i heißen, in der cmd wär das sogar ein fehler
Was heißt "nur"? Wie hast du dir das sonst gedacht, z.B. mit dem goto?
irgendwer schrieb:
Ich seh rot wenn jemand scripten und programmieren synonym verwendet
Haarspalter!
irgendwer schrieb:
anpingen eines Gräts mit dieser IP
Schon mal einem "Gerät" diese spezielle IP-Adresse gegeben? Oder die 192.168.1.255?
Dir fehlen noch etwas die Netzwerkgrundlagen.
Nebenbei, was denkst du wie lange so ein Durchlauf mit über 250 pings dauert?
Wer sagt, dass die PCs nur in einem Subnet sitzen?
Das Polling hab ich ja schon angesprochen.Dein Vorschlag ist zwar gut gemeint, aber praktikabel ist er nicht. Der Ansatz ist einfach verkehrt.
-
Sorry, hab deinen Beitrag nicht gesehen.
Wie es aussieht hast du selbst erkannt, dass das Skript noch ein paar Probleme hat. Ich würde nicht mehr daran rumdoktern. Es geht mit anderen Ansätzen einfacher und schneller.
-
irgendwer schrieb:
stimmt mein Lösungsvorschlag ist nicht ganz richtig
ok dann werde ich den mal verbessernsetlocal :start rem durch gehen aller lokalen IPs rem bei erfolg liefert ping 0 und bei Zeitüberschreitung/ungültig 1 FOR /L %%i IN (0,1,255) DO ping 168.192.1.%%i & set /a Aus+=%errorlevel% rem 2 IPs werden auf jeden Fall antworten rem der Router und der PC auf dem die .bat läuft rem 256-2=254 IF %Aus% EQU 254 DO shutdown /s /t 00 rem für jedes Gerät mit einer IP, das nicht beachtet werden soll die Zahl um 1 verringern rem falls ein PC noch an ist, nochmal testen goto :start
Die Rechnung stimmt immer noch nicht, denn die Broadcastadresse 192.168.1.255 liefert dir auch ein errorlevel 0