Blade1981 10 Geschrieben 30. August 2005 Melden Geschrieben 30. August 2005 Hallo! Ich muss in meinem VBS-Script eine Pause einfügen, weil sonst die TCP/IP-Einstellungen nicht übernommen werden. Liegt daran, dass VBS die Befehle einfach abarbeitet und wenn sich die DOS-Box öffnet (netsh-Befehl), macht es mit dem Nächsten weiter, auch wenn der Vorgang der DOS-Box noch nicht abgeschlossen ist. Sprich, wenn gerade die IP-Adresse, Subnetmask und Gateway eingetragen werden, dann fängt er nahezu gleichzeitig it den Eintragänderungen für die DNS-Einträge an. Hier mein Script, wie es NICHT funktioniert (weil eben alles gleichzeitig abgearbeitet wird). Wenn ich alles einzeln mach, funktioniert es: Dim varTCPrun Dim vatDNS1run Dim vatDNS2run Set objshl=createobject("wscript.shell") fncTCP Private Function fncTCP varTCPrun = "netsh interface ip set address name=""Drahtlose Netzwerkverbindung"" source=static addr=192.168.1.2 mask=255.255.255.0 gateway=192.168.1.1 gwmetric=Automatisch" objshl.run varTCPrun fncDelDNS End Function Private Sub fncDelDNS objshl.Run "netsh interface ip delete dns ""Drahtlose Netzwerkverbindung"" all" fncDNS1 End Sub Private Function fncDNS1 varDNS1run = "netsh interface ip add dns ""Drahtlose Netzwerkverbindung"" 192.168.1.1" objshl.Run varDNS1run varDNS2run = "netsh interface ip add dns ""Drahtlose Netzwerkverbindung"" 192.168.1.99 index=2" objshl.Run varDNS2run End Function Um zu zeigen, dass ich schon verschiedenes versucht habe, ist hier Sub und Function verwendet (wo ich eh nicht weiß, was der Unterschied ist). Ich kann auch alles ohne Function machen, dann is des des selbe Problem. Also nochmal kurz und bündig, ich brauch was, womit ich eine Pause einfügen kann, bis beim nächsten Step weiter gemacht wird. Danke schonmals! Zitieren
Zearom 10 Geschrieben 30. August 2005 Melden Geschrieben 30. August 2005 mal mit "sleep(int millisekunde)" probiert? sleep lässt den eigenen Prozess für die anzahl der Millisekunden einschlafen. Zitieren
Blade1981 10 Geschrieben 30. August 2005 Autor Melden Geschrieben 30. August 2005 Ey, das ist genau das was ich wahrscheinlich brauch. Wenn ich's gescheit testen konnt, meld ich mich dann. Also spätestens morgen dann! Danke schonmal! Zitieren
Operator 10 Geschrieben 30. August 2005 Melden Geschrieben 30. August 2005 Hi, bevor Du unnötige Pausen einbaust... versuchs mal mit "call" vor deinen "objshl.Run" Zeilen. Dann wartet er bis der Befehl abgearbeitet ist.... Sub sollte in deinem Fall reichen... Unterschied Sub und Function: Sub arbeitet ein paar Zeilen Code ab, Function auch, aber liefert ein Ergebnis zurück. Gruß Andre Zitieren
Blade1981 10 Geschrieben 30. August 2005 Autor Melden Geschrieben 30. August 2005 Supi! Jetz funzt des alles so wie's soll :) Warum denn nicht gleich so ;) Also nochmals dankeschön und für alle, die den Befehl wissen wollen: WScript.sleep xxxxx 'xxxxx steht für die Anzahl der Milisekunden Die andere Lösung versuch ich dann morgen mal. Wär ja noch nen Tick besser, weil wenn das System stark ausgelastet is, dann kann es ja sein, dass die vorgegebene Zeit sonst nicht ausreicht für die Änderung. Feedback folgt! Zitieren
Blade1981 10 Geschrieben 31. August 2005 Autor Melden Geschrieben 31. August 2005 Guten Morgen! Wenn ich das mit call versuche, also so: call objshl.Run "netsh interface ip delete dns ""Drahtlose Netzwerkverbindung"" all" dann bringt er nen Fehler ab den ersten Anführungszeichen (vor netsh...). Muss ich das ganze dann noch mehr umschreiben oder wie läuft das dann mit dem "call"? Zitieren
Operator 10 Geschrieben 31. August 2005 Melden Geschrieben 31. August 2005 Meistens ist die Fehlermeldung doch sehr aussagekräftig. Versuch mal call objshl.Run("netsh.... Ansonsten poste mal bitte die Fehlermeldung (kein Screenshot, nur Text). Gruß Andre Zitieren
Blade1981 10 Geschrieben 1. September 2005 Autor Melden Geschrieben 1. September 2005 Hab's jetz so probiert: set objshl=createobject("wscript.shell") call objshl.Run("netsh interface ip delete dns ""Drahtlose Netzwerkverbindung"" all") call objshl.Run("netsh interface ip set address name=""Drahtlose Netzwerkverbindung"" source=dhcp") call objshl.Run("netsh interface ip set address name=""Drahtlose Netzwerkverbindung"" source=static addr=" + varIP + " mask=" + varSubnetmask + " gateway=" + varGateway + " gwmetric=Automatisch") (macht ja im Grunde keinen Sinn, aber so kann man gut nachverfolgen, ob er die Befehle nacheinander abruft, oder nahezu gleichzeitig) Jetzt ruft er wieder alle Befehle auf, ohne dass er abwartet, dass der vorherige Befehl abgearbeitet wurde. Bei meinem kleinen Scripting-Tool steht noch folgendes, nachdem ich nach Run die Klammer auf mach: run(command,[WindowStyle],[WaitOnReturn]) Ich kann damit nur nix anfagngen... Vielleicht liegt ja die Lösung hierin! Ups, hab den Fehler im vorigen Posting nicht mit reingeschrieben... Der Fehler lautet (wenn man keine Klammern verwendet): "Anweisungsende erwartet" Also schätz ich, dass die Klammer schon dazu muss. Zitieren
Blade1981 10 Geschrieben 13. September 2005 Autor Melden Geschrieben 13. September 2005 Jetzt muss ich das Thema nochmals aufgreifen... Das Script an sich funktioniert. Jedoch passt das mit der Pause noch nicht. Die Wartezeit einstellen, bis das Script weiterarbeitet, ist nicht optimal, da die Zeiten, je nach Ausführung zwischen 20 sek (von IP auf andere IP umstellen) bis über 50 sek (von DHCP auf IP) variieren. Also wie kann ich in das Script einfügen, dass er warten soll, bis der vorige Befehl abgearbeitet wurde? Das mit dem "call" am Anfang des Befehls funktioniert nicht. Oder wie muss die Zeile dann genau lauten, wenn sie im Normalfall beispielsweise so lautet: objshl.run "netsh interface ip set address ""Drahtlose Netzwerkverbindung"" static 192.168.1.2 255.255.255.0 192.168.1.1 gwmetric=Automatisch" Zitieren
Operator 10 Geschrieben 13. September 2005 Melden Geschrieben 13. September 2005 Hi, versuch mal folgendes... Schreib vor netsh mal folgenden Aufruf: cmd /c start /wait netsh... cmd ruft die Kommandozeile mit dem internen cmd-Befehl start auf, der wiederum andere Programme starten kann und dabei u.A. den Parameter /wait zulässt, der dann dazu führt, daß die Zeile in deinem Script genau dann endet, wenn netsh endet. Gruß Andre Zitieren
Blade1981 10 Geschrieben 14. September 2005 Autor Melden Geschrieben 14. September 2005 Hab das nun ausprobiert wie mir Operator vorgeschlagen hat. Funktioniert so leider auch nicht. Problem: Zeichen 5, Syntaxfehler. Das 5. Zeichen ist "/" vor dem "c" Zeile lautet so: cmd /c start /wait netsh...usw... Wenn ich das /c weg lass, dann schreibt er als Fehler, dass nach wait (Zeichen 17) das Anweisungsende erwartet wird. Noch nen Tip? Aber danke trotzdem! Zitieren
Operator 10 Geschrieben 14. September 2005 Melden Geschrieben 14. September 2005 Hi, ich hab das ganze mal auf einen Zweizeiler heruntergebrochen, um die Syntax kurz zu testen. Also folgender Test öffnet erwartungsgemäß calc.exe mit einer schönen DOS-Box im Hintergrund, die sich erst schließt, wenn der Prozess calc.exe endet. Set objshl=createobject("wscript.shell") objshl.Run "cmd /c start /wait c:\winnt\system32\calc.exe" Vielleicht noch was übersehen? Gruß Andre Zitieren
Blade1981 10 Geschrieben 22. September 2005 Autor Melden Geschrieben 22. September 2005 so... Jetzda bin i wieder an meinem Projekt dran gesessen... Hab den Vorschlag von "Operator" versucht, klappt leider auch nicht. Allerindgs hab ich das Problem jetzt umgangen. Ich lass nun zuerst die DNS-Einträge machen und dann erst die IP-Einstellungen. Nach den DNS-Einträgen eine gewisse Pause, die nicht wirklich stark variiert (was bei den TCP-Einstellungen ganz anders is. Hier variieren die Einstellungszeiten zwischen 8 und 50 Sekunden) und schon funktioniert das Ganze ;) Ach ja, kannst es ja mal noch so testen (dann merkst, dass er nicht wartet! Er wartet nur mit schließen des DOS-Fensters, bis du das gestartete Programm zu machst!): Set objshl=createobject("wscript.shell") objshl.Run "cmd /c start /wait c:\windows\system32\calc.exe" objshl.Run "cmd /c start /wait c:\windows\system32\mspaint.exe" objshl.Run "cmd /c start /wait c:\windows\system32\calc.exe" objshl.Run "cmd /c start /wait c:\windows\system32\mspaint.exe" objshl.Run "cmd /c start /wait c:\windows\system32\calc.exe" objshl.Run "cmd /c start /wait c:\windows\system32\mspaint.exe" objshl.Run "cmd /c start /wait c:\windows\system32\calc.exe" objshl.Run "cmd /c start /wait c:\windows\system32\mspaint.exe" objshl.Run "cmd /c start /wait c:\windows\system32\calc.exe" objshl.Run "cmd /c start /wait c:\windows\system32\mspaint.exe" objshl.Run "cmd /c start /wait c:\windows\system32\calc.exe" objshl.Run "cmd /c start /wait c:\windows\system32\mspaint.exe" objshl.Run "cmd /c start /wait c:\windows\system32\calc.exe" objshl.Run "cmd /c start /wait c:\windows\system32\mspaint.exe" objshl.Run "cmd /c start /wait c:\windows\system32\calc.exe" objshl.Run "cmd /c start /wait c:\windows\system32\mspaint.exe" objshl.Run "cmd /c start /wait c:\windows\system32\calc.exe" objshl.Run "cmd /c start /wait c:\windows\system32\mspaint.exe" objshl.Run "cmd /c start /wait c:\windows\system32\calc.exe" objshl.Run "cmd /c start /wait c:\windows\system32\mspaint.exe" objshl.Run "cmd /c start /wait c:\windows\system32\calc.exe" objshl.Run "cmd /c start /wait c:\windows\system32\mspaint.exe" Viele Dank trotzdem!!! Zitieren
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.