vip0r
Goto Top

VBScript. Sleep einbauen?

Hallo zusammen,

ich hab ein VB-Script, welches im groben folgende Dinge durchführt:

- Standort ermitteln
- Username ermitteln
- Subst löschen
- Laufwerk mappen
- Bestimmte Dateien auf das neu gemappte Laufwerk kopieren.

Sporadisch kommt es jetz allerdings zu dem Problem, das er manchmal mit dem kopieren der Dateien anfangen will obwohl das Laufwerk wohl doch noch nicht 100 % gemapped ist.

Hier mal der verwendete Code für die kritischen Dinge. (Subst löschen und Laufwerk mappen funktioniert im Prinzip noch, lediglich die Dateien kann er nicht kopieren)

[code]
''Subst löschen:
Sub DelSubst
WshShell.run "subst.exe y: /D"
End Sub

''Laufwerk mappen
Sub HomeLaufwerkMappen(Server, Username)
WshShell.run "Net use Y: \\"&Server&"\zensiert
End Sub

''Files kopieren
Sub CopyNotes()
objFSO.CopyFolder "bla"
End if
End Sub
[/Code]

Jetz erstmal grundsätzlich eine Frage. Habt ihr ähnliche Probleme auch schonmal gehabt, oder liege ich völlig falsch mit meiner Vermutung, das es möglich ist, das das Script abbricht, weil eben besagtes Laufwerk noch nicht komplett geshared ist?
Gibt es eine Art "sleep"-Funktion innerhalb von vbscript?

Danke schonmal,

Andy

Content-ID: 95849

Url: https://administrator.de/contentid/95849

Ausgedruckt am: 08.11.2024 um 19:11 Uhr

AndreasHoster
AndreasHoster 02.09.2008 um 09:40:24 Uhr
Goto Top
Wenn Du mit WshShell.run etwas startest, läuft das parallel zum Skript weiter. Daher kann der net use Befehl noch nicht fertig sein, wenn Du mit dem kopieren anfängst.
Und es gibt sleep, aber das wäre Anfängerprogrammierung.
Am Besten wäre es, net use durch
Set wshnet = CreateObject("WScript.Network")  
wshnet.MapNetworkDrive ">:","\\server\zensiert"   
zu ersetzen.
Alternativ kann man dem RUN Befehl auch sagen, daß er auf Abschluß warten soll.
wshshell.run Command, WindowStyle, WaitOnReturn
WaitOnReturn = TRUE und es geht erst weiter, wenn der Befehl fertig ist.
Und zum Sleep:
wscript.sleep dauer
SchraderCC
SchraderCC 02.09.2008 um 10:37:09 Uhr
Goto Top
Hallo Andy,

für deine Zwecke brauchst du keine "sleep" Funktion, sondern lediglich einen zusätzlichen Parameter - in deinem Falle so:

Dim strCommand
strCommand = "net net use y:\\" & servername & "\zensiert"
WshShell.run strCommand,,True

Der Schalter [True] läßt dein VBScript auf die vollständige Abarbeitung des externen Aufrufs warten, damit ist sichergestellt, dass das Lauferk gemappt ist.

Alternativ könnte man nach diesem Befehl noch in einer Schleife testen, ob du auf das gemappte Laufwerk zugreifen kann (mittels onjFSO-Methoden).

Gruß Bent
Vip0r
Vip0r 02.09.2008 um 11:55:49 Uhr
Goto Top
Aja, hervorragend!

Die sauberste Lösung wäre wohl das mappen mittels des Wscript.Network Objekts. Da ich mir das komplette umcoden jedoch sparen möchte werd ich die Erweiterung WaitOnReturn einbauen.