Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

VBSkript - Netzlaufwerk bei Anmeldung löschen und neu verbinden

Frage Microsoft Windows Netzwerk

Mitglied: 18228

18228 (Level 1)

05.10.2005, aktualisiert 17.10.2012, 16410 Aufrufe, 14 Kommentare

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
Mitglied: gemini
05.10.2005 um 12:44 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 & """"
' ~~~~~~~~~~~~~~~~~~~~

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?
Evtl. geht das schneller als du schauen kannst.
Zum testen, ERST alle Laufwerke trennen, PAUSE, Schauen was passiert ist, DANN wieder verbinden.

Gruß
gemini
Bitte warten ..
Mitglied: 18228
05.10.2005 um 13:05 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
Bitte warten ..
Mitglied: 16640
05.10.2005 um 13:17 Uhr
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

01.
if exist u:\ net use u: /delete
und dann die neuen Mappings:

01.
net use u: \\servername\freigabe
hand/dba
Bitte warten ..
Mitglied: 18228
05.10.2005 um 13:36 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
Bitte warten ..
Mitglied: 16640
05.10.2005 um 13:41 Uhr
Hi Howi,

umbenennen? Erklär' mal, mach mir ein Beispiel


hand/dba
Bitte warten ..
Mitglied: 18228
05.10.2005 um 14:02 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_Anmeldeskript.html#39423.

Howi
Bitte warten ..
Mitglied: gemini
05.10.2005 um 14:14 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.
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 Abhilfe
Bitte warten ..
Mitglied: 18228
05.10.2005 um 14:22 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
Bitte warten ..
Mitglied: gemini
05.10.2005 um 15:39 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
Bitte warten ..
Mitglied: Biber
07.10.2005, aktualisiert 17.10.2012
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/forum/net-use-i%3a-archiv-name-14762.html#5 ... 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
Bitte warten ..
Mitglied: gemini
07.10.2005 um 16:38 Uhr
@gemini: Die Batch-Variante aber natürlich nur als Notlösung. Dein Script läuft schon prima *zwinker
@Biber
Ich 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.
Bitte warten ..
Mitglied: Biber
07.10.2005 um 23:21 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
Bitte warten ..
Mitglied: 18228
10.10.2005 um 16:51 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
Bitte warten ..
Mitglied: TuXHunt3R
26.07.2007 um 11:20 Uhr
Gibt es in VBScript nicht so etwas wie ein "sleep"?

Ansonsten hier eine einfache Batchlösung:

01.
 
02.
if exist p: ( 
03.
net use P: /delete 
04.
05.
 
06.
net use P: \\server\share 
07.
 
Nicht getestet, müsste aber hinhauen
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows 10
Surface 4 Pro Netzlaufwerk verbinden (4)

Frage von Yannosch zum Thema Windows 10 ...

SAN, NAS, DAS
Netzlaufwerk verbinden - komisches Verhalten (15)

Frage von duschgas zum Thema SAN, NAS, DAS ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...