Jump to content

Pause in VBS


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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!

Link zu diesem Kommentar

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!

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
  • 2 Wochen später...

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"

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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!

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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!!!

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...