Funktion um Netzlaufwerke zu verbinden
Mein Ziel: einfach mehrere Netzlaufwerke mit einer Methode erstellen zu können
Hier was ich bisher habe....
' Zweck: mehrere Netzlaufwerk verbinden mit eigener Bezeichnung
' Konsolenbefehl zum trennen aller bisher gemappten Laufwerke starten
Set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.Run("net use * /d /y")
Set WshShell = Nothing
' Variablen deklarieren
Dim objNetwork, objShell
Dim strMyName, strMyDriveLetter, strMyRemotePath
Public Function mapMyDrives(strMyName As String, strMyDriveLetter As String, strMyRemotePath As String) As Boolean
Set objNetwork = CreateObject("WScript.Network")
objNetwork.MapNetworkDrive strMyDriveLetter, strMyRemotePath
Set objShell = CreateObject("Shell.Application")
objShell.NameSpace(strMyDriveLetter).Self.Name = strMyName
mapMyDrives = True
End Function
' hier dann der Funktionsaufruf mit dem ich schön die Laufwerke verbinden kann
mapMyDrives("Mein Tauschlaufwerk", "T:", "\\server1\tausch")
mapMyDrives("Mein Backuplaufwerk", "B:", "\\server1\backup")
Set objNetwork = Nothing
Set objShell = Nothing
Leider kommt ständig ein Fehler das eine Klammer fehlen würde...
Ich bin kein VBler, aber denke schon nahe an der Lösung zu sein.
Ist der Lösungsansatz von hinten durch die Brust oder soweit okay?
Ziel: Ich möchte einfach ein sauberes Skript haben mit dem ich beim Rechnerstart erstmal alle bisherigen Laufwerke trenne und dann die neuen mit Bezeichnung anlege.
Wenn jemandem einfällt wie man zB noch prüfen kann ob Laufwerke bzw. Buchstaben bereits belegt sind zB D: für ein CD-Rom oder so, wäre ich dankbar für eine Abfrage wie man das prüft. Es gibt nichts schlimmeres als ein Mapping das fehlschlägt weil ein USB Stick oder CD-Rom oder Wechseldatenträger einen Laufwerksbuchstaben blockiert...
Danke für jeden Hinweis.
Hier was ich bisher habe....
' Zweck: mehrere Netzlaufwerk verbinden mit eigener Bezeichnung
' Konsolenbefehl zum trennen aller bisher gemappten Laufwerke starten
Set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.Run("net use * /d /y")
Set WshShell = Nothing
' Variablen deklarieren
Dim objNetwork, objShell
Dim strMyName, strMyDriveLetter, strMyRemotePath
Public Function mapMyDrives(strMyName As String, strMyDriveLetter As String, strMyRemotePath As String) As Boolean
Set objNetwork = CreateObject("WScript.Network")
objNetwork.MapNetworkDrive strMyDriveLetter, strMyRemotePath
Set objShell = CreateObject("Shell.Application")
objShell.NameSpace(strMyDriveLetter).Self.Name = strMyName
mapMyDrives = True
End Function
' hier dann der Funktionsaufruf mit dem ich schön die Laufwerke verbinden kann
mapMyDrives("Mein Tauschlaufwerk", "T:", "\\server1\tausch")
mapMyDrives("Mein Backuplaufwerk", "B:", "\\server1\backup")
Set objNetwork = Nothing
Set objShell = Nothing
Leider kommt ständig ein Fehler das eine Klammer fehlen würde...
Ich bin kein VBler, aber denke schon nahe an der Lösung zu sein.
Ist der Lösungsansatz von hinten durch die Brust oder soweit okay?
Ziel: Ich möchte einfach ein sauberes Skript haben mit dem ich beim Rechnerstart erstmal alle bisherigen Laufwerke trenne und dann die neuen mit Bezeichnung anlege.
Wenn jemandem einfällt wie man zB noch prüfen kann ob Laufwerke bzw. Buchstaben bereits belegt sind zB D: für ein CD-Rom oder so, wäre ich dankbar für eine Abfrage wie man das prüft. Es gibt nichts schlimmeres als ein Mapping das fehlschlägt weil ein USB Stick oder CD-Rom oder Wechseldatenträger einen Laufwerksbuchstaben blockiert...
Danke für jeden Hinweis.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 11041
Url: https://administrator.de/contentid/11041
Ausgedruckt am: 26.11.2024 um 12:11 Uhr
13 Kommentare
Neuester Kommentar
Hi,
muß es wirklich VB sein? Falls nicht, nutz doch einfach net use in einer Batch.
Das Forum ist voll mit Beisplielen dazu.
Psycho
Klug ist jeder - der eine vorher, der andere hinterher
muß es wirklich VB sein? Falls nicht, nutz doch einfach net use in einer Batch.
Das Forum ist voll mit Beisplielen dazu.
Psycho
Klug ist jeder - der eine vorher, der andere hinterher
Hallo tomtetom,
super !
genau sowas suche ich !
Jetzt fehlt für meine Zwecke noch der Benutzername und Kennwort:
bis jetzt arbeite ich mit "net use /USER:username pw"
und suche für Dein Super-Script die Möglichkeit, dieses auch fest zu hinterlegen und zwar möglichst pro Laufwerk.
PS: gibt's für das Script eine elegantere Lösung um vorh. Netzlaufwerke zu trennen, außer "WshShell.Run("net use * /d /y") " - das finde ich nicht ganz so schön, weil halt die Dos-Box kurz hochkommt.
Viele Grüße
Jörg
super !
genau sowas suche ich !
Jetzt fehlt für meine Zwecke noch der Benutzername und Kennwort:
bis jetzt arbeite ich mit "net use /USER:username pw"
und suche für Dein Super-Script die Möglichkeit, dieses auch fest zu hinterlegen und zwar möglichst pro Laufwerk.
PS: gibt's für das Script eine elegantere Lösung um vorh. Netzlaufwerke zu trennen, außer "WshShell.Run("net use * /d /y") " - das finde ich nicht ganz so schön, weil halt die Dos-Box kurz hochkommt.
Viele Grüße
Jörg
Moin baruse,
Die entsprechende Methode heißt .RemoveNetworkDrive
Du findest auch hier im Forum dazu Beispiele.
Ein "net use * /d" , also Trennen aller Netzlaufwerke ist über eine For..Each..Schleife möglich, aber ich verstehe nicht, wo dieses pauschale Trennen nötig sein soll.
Ich komme bislang mit dem gezielten Trennen der Laufwerke aus, die ich auch verbunden habe (oder neu verbinden will).
Also
Gruß
Biber
P.S. Hier noch ein besseres Beispiel (das von gemini):
Die entsprechende Methode heißt .RemoveNetworkDrive
Du findest auch hier im Forum dazu Beispiele.
Ein "net use * /d" , also Trennen aller Netzlaufwerke ist über eine For..Each..Schleife möglich, aber ich verstehe nicht, wo dieses pauschale Trennen nötig sein soll.
Ich komme bislang mit dem gezielten Trennen der Laufwerke aus, die ich auch verbunden habe (oder neu verbinden will).
Also
Option Explicit
Dim objNetwork, strDriveMapped
strDriveMapped = "T:"
Set objNetwork = CreateObject("WScript.Network")
objNetwork.RemoveNetworkDrive strDriveMapped, TRUE ' TRUE entspricht dem "/Y bei "net use t: /D /Y"
set objNetwork=null
'Wscript.Quit
Gruß
Biber
P.S. Hier noch ein besseres Beispiel (das von gemini):
Hallo Biber,
vielen Dank für die prompte Antwort (zu solch nächtlicher Stunde)
wenn Du jetzt noch einen Tip hättest bez. des Usernamens... (jedem Mapping soll ein Username & Passwort mitgegeben werden)
Um es ganz genau zu machen:
ich suche eigentlich einen Ersatz für folgende Zeile:
if not exist s:\nul @354 use s: \\192.168.100.80\software /USER:username pw /persistent:yes
if not exist t:\nul @354 use t: \\192.168.100.80\driver /USER:username pw /persistent:yes
Also Abfrage ob das LW schon existiert ist und nur wenn nicht dann verbinden
von net use will ich weg weil.
1. keine Möglichkeit besteht, dem Laufwerk einen Namen zu geben
2. die Dos-Box einfach unschön ist
Viele Grüße
Jörg
vielen Dank für die prompte Antwort (zu solch nächtlicher Stunde)
wenn Du jetzt noch einen Tip hättest bez. des Usernamens... (jedem Mapping soll ein Username & Passwort mitgegeben werden)
Um es ganz genau zu machen:
ich suche eigentlich einen Ersatz für folgende Zeile:
if not exist s:\nul @354 use s: \\192.168.100.80\software /USER:username pw /persistent:yes
if not exist t:\nul @354 use t: \\192.168.100.80\driver /USER:username pw /persistent:yes
Also Abfrage ob das LW schon existiert ist und nur wenn nicht dann verbinden
von net use will ich weg weil.
1. keine Möglichkeit besteht, dem Laufwerk einen Namen zu geben
2. die Dos-Box einfach unschön ist
Viele Grüße
Jörg
Na, baruse,
dafür reichen meine spärlichen VBS-Kenntnisse gerade noch (aber das hätte Dir auch jeder hergelaufene Google gebracht):
Syntax MapNetworkDrive:
MapNetworkDrive(strLocalName, strRemoteName, [bUpdateProfile],[strUser], [strPassword])
Also müsstest Du tomtetoms Schnipsel aufbohren zu
Gruß Biber
dafür reichen meine spärlichen VBS-Kenntnisse gerade noch (aber das hätte Dir auch jeder hergelaufene Google gebracht):
Syntax MapNetworkDrive:
MapNetworkDrive(strLocalName, strRemoteName, [bUpdateProfile],[strUser], [strPassword])
Also müsstest Du tomtetoms Schnipsel aufbohren zu
...
Public Function mapMyDrives(strMyName, strMyDriveLetter, strMyRemotePath, strUsername, strPassword)
objNetwork.MapNetworkDrive strMyDriveLetter, strMyRemotePath, FALSE, strUsername, strPassword
objShell.NameSpace(strMyDriveLetter).Self.Name = strMyName
mapMyDrives = ""
End Function
' hier dann der Funktionsaufruf mit dem ich schön die Laufwerke verbinden kann
mapMyDrives "Mein Tauschlaufwerk", "T:", "\\server1\tausch", "baruse", "ioT67f"
mapMyDrives "Mein Backuplaufwerk", "B:", "\\server1\backup" ,"baruse" , "ioT67f"
...
Gruß Biber
Hallo Biber,
mensch super !
Ich bin in Sachen VBA noch völlig blank - vielen Dank für die schnelle Hilfe !
Hat noch jemand 'ne Idee wie man abfragen kann, ob das Laufwerk bereits verbunden ist und nur dann die Schritte ausführt ?
M.W. kommt ja ne FM wenn man versucht ein LW zu verbinden welches bereits verbunden ist.
Das möchte ich halt abfangen.
Viele Grüße
Jörg
mensch super !
Ich bin in Sachen VBA noch völlig blank - vielen Dank für die schnelle Hilfe !
Hat noch jemand 'ne Idee wie man abfragen kann, ob das Laufwerk bereits verbunden ist und nur dann die Schritte ausführt ?
M.W. kommt ja ne FM wenn man versucht ein LW zu verbinden welches bereits verbunden ist.
Das möchte ich halt abfangen.
Viele Grüße
Jörg
Moin Jörg,
ich hatte weiter oben doch einen Link zu einer gemini-Lösung gepostet.
Und an geminis VBS-Schnipseln lässt sich genausowenig etwas optimieren wie an an einem Elton-John-Song.
In dem Schnipsel wird einfach die Liste aller gemappten Laufwerke durchlaufen und removed.
Entspricht doch Deinem "net * /d /y" (und im nächsten Atemzug wieder "net use .../persistant") *gg
Und wenn Du bei Dir nur die Laufwerke "S:" und "T:" trennen willst und die sicherheitshalber neu mappen, dann prüfe doch innerhalb der "For i=0 To alleDrives"-Konstruktion, ob "uppercase(coldrives(i))="S" or "uppercase(coldrives(i))="T" ist.
Nur Mut..mit VBS kannst Du kaum was zerschroten...
Grüße
Biber
ich hatte weiter oben doch einen Link zu einer gemini-Lösung gepostet.
Und an geminis VBS-Schnipseln lässt sich genausowenig etwas optimieren wie an an einem Elton-John-Song.
In dem Schnipsel wird einfach die Liste aller gemappten Laufwerke durchlaufen und removed.
Entspricht doch Deinem "net * /d /y" (und im nächsten Atemzug wieder "net use .../persistant") *gg
....
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), blnForce
Next
End If
On Error GoTo 0
'...usw
Und wenn Du bei Dir nur die Laufwerke "S:" und "T:" trennen willst und die sicherheitshalber neu mappen, dann prüfe doch innerhalb der "For i=0 To alleDrives"-Konstruktion, ob "uppercase(coldrives(i))="S" or "uppercase(coldrives(i))="T" ist.
Nur Mut..mit VBS kannst Du kaum was zerschroten...
Grüße
Biber
Hallo Biber,
ich glaub das ist alles nix für mich;
vor lauter Schnipsel werden jetzt nur noch Laufwerke getrennt, aber nicht mehr verbunden.
Problem ist auch daß ich überhaupt nicht verstehe was ich da zusammenschnipsle;
in einer Batchdatei kann ich wenigstens durch einfügen von "pause" sehen was er macht und warum was nicht funktioniert;
Kannst Du mir vielleicht den Code in einem Zug darstellen ?
Prüfen ob Netzlaufwerke vorhanden und wenn nicht dann (mehrere) verbinden, oder gleich alle trennen und neu verbinden...
Mit verzweifeltem Gruß
Jörg
ich glaub das ist alles nix für mich;
vor lauter Schnipsel werden jetzt nur noch Laufwerke getrennt, aber nicht mehr verbunden.
Problem ist auch daß ich überhaupt nicht verstehe was ich da zusammenschnipsle;
in einer Batchdatei kann ich wenigstens durch einfügen von "pause" sehen was er macht und warum was nicht funktioniert;
Kannst Du mir vielleicht den Code in einem Zug darstellen ?
Prüfen ob Netzlaufwerke vorhanden und wenn nicht dann (mehrere) verbinden, oder gleich alle trennen und neu verbinden...
Mit verzweifeltem Gruß
Jörg
Na, Jörg,
nun mal keine Panik. Auch in VBS gibt es Msgbox'en und wscript.echo's, mit denen Du Deinen Source-Code verfolgen kannst.
Und Du hast gleich zwei funktionierende Vorlagen (die von tomtetom und die von gemini), die Du nur noch zusammenkopieren musst.
Fang an, poste das Zwischenergebnis und dann bringen wir die Kuh zum Fliegen.
Wenn es überhaupt sein muss.
Denn ein bisschen unsinnig ist der Aufwand schon IMHO.
Du willst IMMER (persistent) diese zwei Netzlaufwerke haben ->einmal persistent brauchst Du nie wieder Username/Passwort oder ein Net use.
Bis es in fünf Jahren mal irgendeiner trennt.
Und ebenso unnötig ist das tägliche "Laufwerksbezeichnungen zuweisen". Mach ich ja auch nicht täglich.
Einmalig in die Registry (suche mal im Forum nach "Mountpoints") und gut ists.
Und die Notwendigkeit von VBS statt Batch, weil...
Dann ändere das in "WshShell.Run("net use * /d /y", 0, True) " -- dann geht kein CMD-Fenster auf.
Egal, poste das, was Du hast, dann schreddern wir das im Forum zusammen.
Grüße
Biber
nun mal keine Panik. Auch in VBS gibt es Msgbox'en und wscript.echo's, mit denen Du Deinen Source-Code verfolgen kannst.
Und Du hast gleich zwei funktionierende Vorlagen (die von tomtetom und die von gemini), die Du nur noch zusammenkopieren musst.
Fang an, poste das Zwischenergebnis und dann bringen wir die Kuh zum Fliegen.
Wenn es überhaupt sein muss.
Denn ein bisschen unsinnig ist der Aufwand schon IMHO.
Du willst IMMER (persistent) diese zwei Netzlaufwerke haben ->einmal persistent brauchst Du nie wieder Username/Passwort oder ein Net use.
Bis es in fünf Jahren mal irgendeiner trennt.
Und ebenso unnötig ist das tägliche "Laufwerksbezeichnungen zuweisen". Mach ich ja auch nicht täglich.
Einmalig in die Registry (suche mal im Forum nach "Mountpoints") und gut ists.
Und die Notwendigkeit von VBS statt Batch, weil...
"WshShell.Run("net use * /d /y") " - das finde ich nicht ganz so schön, weil halt die Dos-Box kurz hochkommt.
*kopfschüttel*Dann ändere das in "WshShell.Run("net use * /d /y", 0, True) " -- dann geht kein CMD-Fenster auf.
Egal, poste das, was Du hast, dann schreddern wir das im Forum zusammen.
Grüße
Biber
Hallo Biber,
hab jetzt irgendwie was hingekriegt und es scheint auch zu funktionieren;
ob das nun sinnig ist, weiß ich nicht weil ich den Code so nicht verstehe;
hab ich mir halt zusammengeklaut...
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), blnForce
Next
End If
On Error GoTo 0
Dim objNetwork, objShell
Dim strMyName, strMyDriveLetter, strMyRemotePath
Set objNetwork = CreateObject("WScript.Network")
Set objShell = CreateObject("Shell.Application")
Public Function mapMyDrives(strMyName, strMyDriveLetter, strMyRemotePath, strUsername, strPassword)
objNetwork.MapNetworkDrive strMyDriveLetter, strMyRemotePath, FALSE, strUsername, strPassword
objShell.NameSpace(strMyDriveLetter).Self.Name = strMyName
mapMyDrives = ""
End Function
On Error Resume Next
mapMyDrives "Bilder", "B:", "\\192.168.100.80\photo", "Username", "pw"
mapMyDrives "Musik", "M:", "\\192.168.100.80\music", "Username", "pw"
mapMyDrives "Eigene Dateien", "N:", "\\192.168.100.80\own", "Username", "pw"
mapMyDrives "Software", "S:", "\\192.168.100.80\software", "Username", "pw"
'mapMyDrives "Web-Baruse", "T:", "\\192.168.100.80\web", "Username", "pw"
'mapMyDrives "Test-Baruse", "U:", "\\192.168.100.80\test1", "Username", "pw"
Set objNetwork = Nothing
Set objShell = Nothing
hab jetzt irgendwie was hingekriegt und es scheint auch zu funktionieren;
ob das nun sinnig ist, weiß ich nicht weil ich den Code so nicht verstehe;
hab ich mir halt zusammengeklaut...
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), blnForce
Next
End If
On Error GoTo 0
Dim objNetwork, objShell
Dim strMyName, strMyDriveLetter, strMyRemotePath
Set objNetwork = CreateObject("WScript.Network")
Set objShell = CreateObject("Shell.Application")
Public Function mapMyDrives(strMyName, strMyDriveLetter, strMyRemotePath, strUsername, strPassword)
objNetwork.MapNetworkDrive strMyDriveLetter, strMyRemotePath, FALSE, strUsername, strPassword
objShell.NameSpace(strMyDriveLetter).Self.Name = strMyName
mapMyDrives = ""
End Function
On Error Resume Next
mapMyDrives "Bilder", "B:", "\\192.168.100.80\photo", "Username", "pw"
mapMyDrives "Musik", "M:", "\\192.168.100.80\music", "Username", "pw"
mapMyDrives "Eigene Dateien", "N:", "\\192.168.100.80\own", "Username", "pw"
mapMyDrives "Software", "S:", "\\192.168.100.80\software", "Username", "pw"
'mapMyDrives "Web-Baruse", "T:", "\\192.168.100.80\web", "Username", "pw"
'mapMyDrives "Test-Baruse", "U:", "\\192.168.100.80\test1", "Username", "pw"
Set objNetwork = Nothing
Set objShell = Nothing
Na, sieht doch sauberst aus, baruse,
ich glaube, dann können wir mal einen Moderator rufen, um den Thread zu schließen.
@tomtetom: Falls Du noch noch mitliest, könnstest Du bitte den Beitrag auf "Gelöst" setzen?
Schönes Wochenende allen
Biber
ich glaube, dann können wir mal einen Moderator rufen, um den Thread zu schließen.
@tomtetom: Falls Du noch noch mitliest, könnstest Du bitte den Beitrag auf "Gelöst" setzen?
Schönes Wochenende allen
Biber
Hallo nochmal,
ich hatte es jetzt schon 2 mal, daß bei Neustart eines der Rechner das Laufwerk M zwar verbunden wurde, aber nicht mit dem Namen "Musik" sondern als "Netzlaufwerk".
An was kann das denn jetzt liegen ?
Wäre es nicht doch sinnvoller, erst abzufragen ob das Laufwerk bereits existiert und nur wenn nicht neu zu verbinden ?
Wie müßte so eine Abfrage aussehen ?
Gruß
Jörg
ich hatte es jetzt schon 2 mal, daß bei Neustart eines der Rechner das Laufwerk M zwar verbunden wurde, aber nicht mit dem Namen "Musik" sondern als "Netzlaufwerk".
An was kann das denn jetzt liegen ?
Wäre es nicht doch sinnvoller, erst abzufragen ob das Laufwerk bereits existiert und nur wenn nicht neu zu verbinden ?
Wie müßte so eine Abfrage aussehen ?
Gruß
Jörg