
18228
05.10.2005, aktualisiert am 17.10.2012
VBSkript - Netzlaufwerk bei Anmeldung löschen und neu verbinden
Hallo zusammen,
ich habe ein kleines "Zeitproblem" mit einem VBSkript. Und dieses Skript ist auch mein erstes VBSkript.
Bei der Anmeldung soll überprüft werden, ob es ein bestimmter Laufwerksbuchstabe (z.B. "P:") schon vorhanden ist. Wenn dies zutrifft, dann soll dieses Netzlaufwerk ("P:") getrennt und im direkten Anschluss neu verbunden werden.
Ich frage also mit *DriveExists("P")* ab, ob der Laufwerksbuchstabe "P" schon vergeben ist und lösche ggf. mit *Set objNetwork = CreateObject("WScript.Network")* und *objNetwork.RemoveNetworkDrive "P:"* die Verbindung. Danach soll dann mit *Set objNetwork = CreateObject("WScript.Network")* und *objNetwork.MapNetworkDrive "P:", "\\Server\Freigabe"* das Laufwerk "P" neu verbunden werden.
Leider funktioniert das Ganze nicht, da bei der Skriptausführung nicht auf die Abarbeitung und die tatsächlichen Trennung gewartet wird. Dadurch bleibt alles so, wie vor dem Start des Skriptes, d.h. die alte Netzlaufwerksverbindung bleibt bestehen.
Wenn ich zwischen der Trennung und der neuen Verbindung eine Messagebox einblende und etwas warte, bis ich auf OK drücke, dann funktioniert alles wunderbar.
Wie kann ich dieses Problem automatisch und sicher lösen?
Besten Dank im Voraus für eure Hilfe.
Howi
ich habe ein kleines "Zeitproblem" mit einem VBSkript. Und dieses Skript ist auch mein erstes VBSkript.
Bei der Anmeldung soll überprüft werden, ob es ein bestimmter Laufwerksbuchstabe (z.B. "P:") schon vorhanden ist. Wenn dies zutrifft, dann soll dieses Netzlaufwerk ("P:") getrennt und im direkten Anschluss neu verbunden werden.
Ich frage also mit *DriveExists("P")* ab, ob der Laufwerksbuchstabe "P" schon vergeben ist und lösche ggf. mit *Set objNetwork = CreateObject("WScript.Network")* und *objNetwork.RemoveNetworkDrive "P:"* die Verbindung. Danach soll dann mit *Set objNetwork = CreateObject("WScript.Network")* und *objNetwork.MapNetworkDrive "P:", "\\Server\Freigabe"* das Laufwerk "P" neu verbunden werden.
Leider funktioniert das Ganze nicht, da bei der Skriptausführung nicht auf die Abarbeitung und die tatsächlichen Trennung gewartet wird. Dadurch bleibt alles so, wie vor dem Start des Skriptes, d.h. die alte Netzlaufwerksverbindung bleibt bestehen.
Wenn ich zwischen der Trennung und der neuen Verbindung eine Messagebox einblende und etwas warte, bis ich auf OK drücke, dann funktioniert alles wunderbar.
Wie kann ich dieses Problem automatisch und sicher lösen?
Besten Dank im Voraus für eure Hilfe.
Howi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 17222
Url: https://administrator.de/forum/vbskript-netzlaufwerk-bei-anmeldung-loeschen-und-neu-verbinden-17222.html
Ausgedruckt am: 18.04.2025 um 19:04 Uhr
14 Kommentare
Neuester Kommentar
Hallo Howi,
warum so kompliziert?
Es passiert nichts schlimmes, wenn du die Laufwerke trennst, auch wenn sie nicht existieren:
' ~~~~~~~~~~~~~~~~~~~~
' Mapping1.vbs
' Trennt, verbindet die angegebenen Laufwerke und benennt sie um
strFileSRV = "DerFileServer"
Set WshNetwork = Wscript.CreateObject("Wscript.Network")
Set objShell = CreateObject("Shell.Application")
WshNetwork.RemoveNetworkDrive "P:"
WshNetwork.MapNetworkDrive "P:", "\\" & strFileSRV & "\public"
objShell.NameSpace("P:").Self.Name = "Public auf """ & strFileSRV & """"
' ~~~~~~~~~~~~~~~~~~~~
' Mapping2.vbs
' Trennt _alle_ Netzlaufwerke, auch solche
' die vom User selbst erstellt wurden
strFileSRV = "DerFileServer"
Set WshNetwork = Wscript.CreateObject("Wscript.Network")
Set colDrives = WshNetwork.EnumNetworkDrives
On Error Resume Next
If colDrives.Count > 0 Then
For i = 0 To colDrives.Count - 1 Step 2
WshNetwork.RemoveNetworkDrive colDrives(i), TRUE
Next
End If
On Error GoTo 0
WshNetwork.MapNetworkDrive "P:", "\\" & strFileSRV & "\public"
objShell.NameSpace("P:").Self.Name = "Public auf """ & strFileSRV & """"
' ~~~~~~~~~~~~~~~~~~~~
Evtl. geht das schneller als du schauen kannst.
Zum testen, ERST alle Laufwerke trennen, PAUSE, Schauen was passiert ist, DANN wieder verbinden.
Gruß
gemini
warum so kompliziert?
Es passiert nichts schlimmes, wenn du die Laufwerke trennst, auch wenn sie nicht existieren:
' ~~~~~~~~~~~~~~~~~~~~
' Mapping1.vbs
' Trennt, verbindet die angegebenen Laufwerke und benennt sie um
strFileSRV = "DerFileServer"
Set WshNetwork = Wscript.CreateObject("Wscript.Network")
Set objShell = CreateObject("Shell.Application")
WshNetwork.RemoveNetworkDrive "P:"
WshNetwork.MapNetworkDrive "P:", "\\" & strFileSRV & "\public"
objShell.NameSpace("P:").Self.Name = "Public auf """ & strFileSRV & """"
' ~~~~~~~~~~~~~~~~~~~~
' Mapping2.vbs
' Trennt _alle_ Netzlaufwerke, auch solche
' die vom User selbst erstellt wurden
strFileSRV = "DerFileServer"
Set WshNetwork = Wscript.CreateObject("Wscript.Network")
Set colDrives = WshNetwork.EnumNetworkDrives
On Error Resume Next
If colDrives.Count > 0 Then
For i = 0 To colDrives.Count - 1 Step 2
WshNetwork.RemoveNetworkDrive colDrives(i), TRUE
Next
End If
On Error GoTo 0
WshNetwork.MapNetworkDrive "P:", "\\" & strFileSRV & "\public"
objShell.NameSpace("P:").Self.Name = "Public auf """ & strFileSRV & """"
' ~~~~~~~~~~~~~~~~~~~~
Dadurch bleibt alles so, wie vor dem Start des Skriptes,
d.h. die alte Netzlaufwerksverbindung bleibt bestehen.
Bist du sicher? Könnte es sein, dass die alte Verbindung überschrieben wird?d.h. die alte Netzlaufwerksverbindung bleibt bestehen.
Evtl. geht das schneller als du schauen kannst.
Zum testen, ERST alle Laufwerke trennen, PAUSE, Schauen was passiert ist, DANN wieder verbinden.
Gruß
gemini

warum verwendest Du statt eines Skriptes nicht einfach eine Batchdatei (.bat bzw. .btm)? Durch deren sequentielle Abarbeitung solltest Du dieses 'Timing'-Problem umgehen.
Erst die Trennungen (hier am Beispiel von U
und dann die neuen Mappings:
hand/dba
Erst die Trennungen (hier am Beispiel von U
if exist u:\ net use u: /delete
und dann die neuen Mappings:
net use u: \\servername\freigabe
hand/dba

Hi Howi,
umbenennen? Erklär' mal, mach mir ein Beispiel
hand/dba
umbenennen? Erklär' mal, mach mir ein Beispiel
hand/dba
Leider funktioniert es immer noch nicht. Ich
habe dein "Mapping1.vbs" einmal ausprobiert und der gleiche Effekt trat auf.
Wenn das Laufwerk vorhanden ist, dann passiert nichts und wenn ich zwischen Remove
und Map mit Hilfe einer MsgBox die Ausführung der Skriptes anhalte, dann
trennt es erst das Netzlaufwerk und nach meinem "Klick" wird es neu verbunden.
Ich mache es so, dass erst alle Laufwerke mit der Schleife getrennt werden und danach anhand bestimmter Kriterien (RaumNR) wieder verbunden.habe dein "Mapping1.vbs" einmal ausprobiert und der gleiche Effekt trat auf.
Wenn das Laufwerk vorhanden ist, dann passiert nichts und wenn ich zwischen Remove
und Map mit Hilfe einer MsgBox die Ausführung der Skriptes anhalte, dann
trennt es erst das Netzlaufwerk und nach meinem "Klick" wird es neu verbunden.
Wenn ich das Loginscript hier aufrufe kann ich das sogar im Explorer verfolgen
Und wenn das Laufwerk nicht vorhanden ist, dann kommt eine Fehlermeldung, dass das
Laufwerk nicht vorhanden ist. Eigentlich logisch. Deshalb habe ich auch erst eine
Abfrage auf die Existenz des Laufwerks eingebaut.
On Error Resume Next und On Error GoTo 0 bringen AbhilfeLaufwerk nicht vorhanden ist. Eigentlich logisch. Deshalb habe ich auch erst eine
Abfrage auf die Existenz des Laufwerks eingebaut.
Ich hab das jetzt nochmal ausprobiert.
Zuerst alle Laufwerke trennen lassen (mit der Schleife) und dann nur noch ein Laufwerk gemappt und das auf einen anderen Pfad (Mein Homelaufwerk auf ein Public-Verzeichnis) - Es funktioniert, wenn ich auf H:\ klicke bin ich im Public-Ordner, ohne MsgBox oder ähnliches
Zuerst alle Laufwerke trennen lassen (mit der Schleife) und dann nur noch ein Laufwerk gemappt und das auf einen anderen Pfad (Mein Homelaufwerk auf ein Public-Verzeichnis) - Es funktioniert, wenn ich auf H:\ klicke bin ich im Public-Ordner, ohne MsgBox oder ähnliches
Moin howi,
falls es mit dem VBSkript nicht so schnell klappt und Du doch auf Net-Use- und simple Batch-Befehle zurückfällst: wie das mit dem Netzlaufwerke umbenennen per Batch geht, hab ich auch schon ein- oder zweimal hier im Forum beschrieben.
Einen Beitrag hab ich wiedergefunden: net use I: \\archiv\ Name.
@gemini: Die Batch-Variante aber natürlich nur als Notlösung. Dein Script läuft schon prima *zwinker
HTH Frank / der Biber aus Bremen
falls es mit dem VBSkript nicht so schnell klappt und Du doch auf Net-Use- und simple Batch-Befehle zurückfällst: wie das mit dem Netzlaufwerke umbenennen per Batch geht, hab ich auch schon ein- oder zweimal hier im Forum beschrieben.
Einen Beitrag hab ich wiedergefunden: net use I: \\archiv\ Name.
@gemini: Die Batch-Variante aber natürlich nur als Notlösung. Dein Script läuft schon prima *zwinker
HTH Frank / der Biber aus Bremen
@gemini: Die Batch-Variante aber natürlich nur als Notlösung. Dein Script läuft schon prima *zwinker
@BiberIch weiß dass das Script läuft und die Laufwerke richtig verbindet.
U.a. das tut es bei mir täglich und bis jetzt hat es noch keine Beschwerden gegeben.
Wenn er das Script nicht hinbekommt ist es allemal besser, ein Batch laufen zu lassen und danach ein VBS zum umbenennen bzw. den Weg über die Registry zu gehen.
Ach ja, ich habe die Batch-Variante, genausowenig wie Batch an sich, nie als Notlösung bezeichnet.
@gemini

Ich meinte das auch durchaus ernst, dass Dein Skript prima läuft (auch bei mir).
Und ich denke auch nicht, dass sich ein Glaubenskrieg über Sinnhaftigkeit oder Existenzberechtigung von native Batch-Jobs oder VB/JScript oder KiX oder oder oder... lohnt.
Ich verwende viel Cmd-Krams aus den gleichen Gründen wie Du VBSkript - damit können wir beide jeweils stehend freihändig und ohne lang nachzudenken zum Ziel kommen - und das an einem beliebigen Rechner (solange eine Tastatur dranhängt).
Ansonsten weiß ich sehr wohl die Vorzüge von strukturierten Programmschnipseln zu schätzen und will ja nur hin und wieder zeigen, dass sich auch mit (Cmd-)Batchmitteln einige mittelkomplexe Aufgaben lösen lassen.
Wichtiger ist mir meist die Lösungsstrategie, der Algorithmus - das verwendete Werkzeug (also die Programmier- oder Skriptsprache) ist mir sowas von egal...
Da nun sicherlich bei den heutigen Rechnern auch die Performance-Unterschiede zwischen Skriptsprachen und kompilierten Anwendungen bei unseren kleinen Pillepalle-Anwendungen kaum ins Gewicht fallen, stehen für hoffentlich für die meisten Programmnutzer Kriterien wie Robustheit, Flexibilität, Les- und Wartbarkeit und natürlich Portabiltät im Vordergrund. Und nicht die Dateiendung *.vbs, *.js,*.kix oder *.bat. Ist mir alles lieber als eine unflexible oder nicht-portable Exe-Datei.
Was die Lesbarkeit und Nachvollziehbarkeit von Deinen geposteten Beispielen betrifft - da habe ich überhaupt keine Verbesserungsvorschläge zu machen.
Biber
Ich meinte das auch durchaus ernst, dass Dein Skript prima läuft (auch bei mir).
Und ich denke auch nicht, dass sich ein Glaubenskrieg über Sinnhaftigkeit oder Existenzberechtigung von native Batch-Jobs oder VB/JScript oder KiX oder oder oder... lohnt.
Ich verwende viel Cmd-Krams aus den gleichen Gründen wie Du VBSkript - damit können wir beide jeweils stehend freihändig und ohne lang nachzudenken zum Ziel kommen - und das an einem beliebigen Rechner (solange eine Tastatur dranhängt).
Ansonsten weiß ich sehr wohl die Vorzüge von strukturierten Programmschnipseln zu schätzen und will ja nur hin und wieder zeigen, dass sich auch mit (Cmd-)Batchmitteln einige mittelkomplexe Aufgaben lösen lassen.
Wichtiger ist mir meist die Lösungsstrategie, der Algorithmus - das verwendete Werkzeug (also die Programmier- oder Skriptsprache) ist mir sowas von egal...
Da nun sicherlich bei den heutigen Rechnern auch die Performance-Unterschiede zwischen Skriptsprachen und kompilierten Anwendungen bei unseren kleinen Pillepalle-Anwendungen kaum ins Gewicht fallen, stehen für hoffentlich für die meisten Programmnutzer Kriterien wie Robustheit, Flexibilität, Les- und Wartbarkeit und natürlich Portabiltät im Vordergrund. Und nicht die Dateiendung *.vbs, *.js,*.kix oder *.bat. Ist mir alles lieber als eine unflexible oder nicht-portable Exe-Datei.
Was die Lesbarkeit und Nachvollziehbarkeit von Deinen geposteten Beispielen betrifft - da habe ich überhaupt keine Verbesserungsvorschläge zu machen.
Biber