VBSkript - Netzlaufwerk bei Anmeldung löschen und neu verbinden
05.10.2005
12:03:15 Uhr9499 Aufrufe
14 Antworten
12:03:15 Uhr
14 Antworten
Noch nicht bewertet
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
gemini schreibt am 05.10.2005 um 12:44:26 Uhr
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
Howi schreibt am 05.10.2005 um 13:05:49 Uhr
Hallo gemini,
Danke für die schnelle Antwort.
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.
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.
Ich muss noch dazu sagen, dass ich ein Laufwerk von Server "A" trennen möchte und von Server "B" verbinden (u.a. wegen bevorstehendem Serverumzug).
Na gut, ich werde mal alle möglichen Dinge, die mir noch so einfallen, ausprobieren.
Über weiter Tipps würde ich mich natürlich freuen.
Howi
Danke für die schnelle Antwort.
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.
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.
Ich muss noch dazu sagen, dass ich ein Laufwerk von Server "A" trennen möchte und von Server "B" verbinden (u.a. wegen bevorstehendem Serverumzug).
Na gut, ich werde mal alle möglichen Dinge, die mir noch so einfallen, ausprobieren.
Über weiter Tipps würde ich mich natürlich freuen.
Howi
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
01.
if exist u:\ net use u: /deleteund dann die neuen Mappings:
01.
net use u: \\servername\freigabehand/dba
Howi schreibt am 05.10.2005 um 13:36:17 Uhr
Hallo dba,
daran habe ich auch schon gedacht und wenn es anders nicht ohne großen Aufwand klappt, dann werde ich auch diesen Weg gehen. Da nach der Verbindung das Netzlaufwerk auch noch umbenannt werden soll (da habe ich nur eine VBSkript-Lösung), habe ich gedacht, ich erledige alles in einem Skript. Dann hätte ich nicht die verschiedenen Funktionen aufgeteilt (VBSkript - Batch).
Howi
daran habe ich auch schon gedacht und wenn es anders nicht ohne großen Aufwand klappt, dann werde ich auch diesen Weg gehen. Da nach der Verbindung das Netzlaufwerk auch noch umbenannt werden soll (da habe ich nur eine VBSkript-Lösung), habe ich gedacht, ich erledige alles in einem Skript. Dann hätte ich nicht die verschiedenen Funktionen aufgeteilt (VBSkript - Batch).
Howi
Howi schreibt am 05.10.2005 um 14:02:25 Uhr
So, da bin ich wieder,
mit umbenennen meinte ich z.B. die Änderung von "Freigabename auf Servername (PC0815) (P
" in "Persönlich (P
.
Siehe auch http://www.administrator.de/Frage_zu_Anme ....
Howi
mit umbenennen meinte ich z.B. die Änderung von "Freigabename auf Servername (PC0815) (P
Siehe auch http://www.administrator.de/Frage_zu_Anme ....
Howi
gemini schreibt am 05.10.2005 um 14:14:41 Uhr
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.
Howi schreibt am 05.10.2005 um 14:22:39 Uhr
Hallo gemini,
ich habe auch den Arbeitsplatz geöffnet und sehe entweder nichts oder mit MsgBox-Pause wie das Laufwerk getrennt und anschließend neu verbunden wird.
Vielleicht sollte ich doch den Weg über Batchdatei (Trennen+Verbinden) plus VBSkript (Namensänderung) gehen.
Falls ihr doch noch Tipps habt, immer her damit.
Howi
ich habe auch den Arbeitsplatz geöffnet und sehe entweder nichts oder mit MsgBox-Pause wie das Laufwerk getrennt und anschließend neu verbunden wird.
Vielleicht sollte ich doch den Weg über Batchdatei (Trennen+Verbinden) plus VBSkript (Namensänderung) gehen.
Falls ihr doch noch Tipps habt, immer her damit.
Howi
gemini schreibt am 05.10.2005 um 15:39:08 Uhr
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
Biber schreibt am 07.10.2005 um 15:53:04 Uhr
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: <a href=http://www.administrator.de/index.php?con ... target="blank"> hier </a>.
@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: <a href=http://www.administrator.de/index.php?con ... target="blank"> hier </a>.
@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 schreibt am 07.10.2005 um 16:38:20 Uhr
@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.
Biber schreibt am 07.10.2005 um 23:21:44 Uhr
@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
Howi schreibt am 10.10.2005 um 16:51:38 Uhr
Hallo zusammen,
ich hatte leider keine Zeit, um auf eure Antworten früher zu reagieren.
Noch einmal vielen Dank für die Ratschläge. Und dann wollte ich die Batch-Dateien nicht runtermachen, sondern "Notlösung" bedeutete in diesem Fall nur, dass ich die Funktionen nicht mit zwei verschiedenen Dateien (Skript und Batch) lösen wollte. Da es ja wohl auch eine Möglichkeit gibt, die Bezeichnung des verbundenen Netzlaufwerkes mit Hilfe einer Batch-Datei zu verändern (sorry, ich hatte auch noch keine Gelegenheit, mir den oben gelisteten Link/Beitrag anzusehen), werde ich zusehen, dass ich ohne VBSkript die Geschichte löse.
Ich werde mich auf jeden Fall wieder melden, wenn es funktioniert.
Howi
ich hatte leider keine Zeit, um auf eure Antworten früher zu reagieren.
Noch einmal vielen Dank für die Ratschläge. Und dann wollte ich die Batch-Dateien nicht runtermachen, sondern "Notlösung" bedeutete in diesem Fall nur, dass ich die Funktionen nicht mit zwei verschiedenen Dateien (Skript und Batch) lösen wollte. Da es ja wohl auch eine Möglichkeit gibt, die Bezeichnung des verbundenen Netzlaufwerkes mit Hilfe einer Batch-Datei zu verändern (sorry, ich hatte auch noch keine Gelegenheit, mir den oben gelisteten Link/Beitrag anzusehen), werde ich zusehen, dass ich ohne VBSkript die Geschichte löse.
Ich werde mich auf jeden Fall wieder melden, wenn es funktioniert.
Howi







16640schreibt am 05.10.2005 um 13:17:28 Uhr16640schreibt am 05.10.2005 um 13:41:51 Uhr