Netzlaufwerk verbinden, freien Laufwerksbuchstaben vorher ermitteln

  • VBScript

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von jul.

    Netzlaufwerk verbinden, freien Laufwerksbuchstaben vorher ermitteln

    Hallo Zusammen,

    Ich hätte da ein kleines Problem.

    Und zwar würde ich gerne über ein VB Script einen freien Laufwerksbuchstaben ermitteln und dann diesen für eine Verbindung mit einer Freigabe auf dem Server verwenden.

    Bisher habe ich folgenden Code:

    Visual Basic-Quellcode

    1. Set fso = CreateObject("Scripting.FileSystemObject")
    2. Set oDrives = WshNetwork.EnumNetworkDrives
    3. Set net = WScript.CreateObject("WScript.Network")
    4. For i = 0 to oDrives.Count - 1 Step 2
    5. If fso.DriveExists(oDrives.Item(i)) = False Then
    6. net.MapNetworkDrive "oDrives.Item(i):", "\\192.168.5.3\Freigabe", False
    7. Exit For
    8. Next
    9. WScript.Quit


    Leider funktioniert das nicht so ganz. Kann mir jemand helfen?

    Vielen Dank.


    Freundliche Grüße

    p41n
    Herzlichen Dank! Genau das war es.. Die if-Schleife war ja noch gar nicht beendet.

    Nur macht mich jetzt noch eins stutzig.
    Das Script läuft zwar nun ohne Fehlermeldung durch.
    Doch es wird kein Netzlaufwerk verbunden.
    Die Pfadfangabe ist völlig korrekt und die Freigabe ist auch erreichbar.
    Wenn ich das Laufwerk manuel verbinde, funktioniert es.

    Kann es sein, dass er keinen Buchstaben wählt, mit dem er die Freigabe verbinden soll?

    Visual Basic-Quellcode

    1. Set fso = CreateObject("Scripting.FileSystemObject")
    2. Set net = WScript.CreateObject("WScript.Network")
    3. Set oDrives = net.EnumNetworkDrives
    4. For i = 0 to oDrives.Count - 1 Step 2
    5. If fso.DriveExists(oDrives.Item(i)) = False Then
    6. net.MapNetworkDrive oDrives.Item(i) & ":", "\\192.168.5.3\Freigabe", False
    7. Exit For
    8. End If
    9. Next
    10. WScript.Quit



    EDIT:
    Ich habe mal True auf False geändert. Danach meint das Script, dass der angegebene Gerätename unzulässig sei.
    Daraus schließe ich, dass er mit oDrives.Item(i) nicht arbeiten kann. Er benötigt also doch einen passenden Buchstaben zwischen a und z.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „p41n“ ()

    Nein, es ist ganz anders.
    net.EnumNetworkDrives liefert dir alle verbundenen Netzlaufwerke. (bei mir z.B. L: O: W: M: )
    die, die nicht existieren, werden gar nicht erst angezeigt. wenn da also prüfst fso.DriveExists(oDrives.Item(i)) wird immer True ergeben, weil in der Liste nur existierende Items stehen.
    Du musst einen Buchstaben zufällig generieren und dann erst prüfen, ob der Buchstabe in der Liste ist.

    Ich mach dir schnell ein Beispiel

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „jul“ ()

    Genau das habe ich auch gerade herausgefunden. Bei mir hat er nur z ausgespuckt, was ich verbunden habe.
    Als ich dann z: entfernt habe, kam eine leere MsgBox zum Vorschein.

    Ich dachte, ich könnte mit der for-next schleife vielleicht einen Bereich definieren, den er prüft.
    Also sowas wie for drv = a To Z.. Aber das funktioniert leider auch nicht.
    VBScript is in die Richtung etwas komisch, aber gut.
    Das hier gibt in der MsgBox alle Buchstaben aus, die keinem Laufwerk zugeordnet sind.
    (Allerdings wird dein Netzlaufwerk dann immer als A: oder B: verbunden werden, weil die ja praktisch nicht mehr belegt sind (außer Diskette))

    Visual Basic-Quellcode

    1. Set fso = CreateObject("Scripting.FileSystemObject")
    2. Set net = WScript.CreateObject("WScript.Network")
    3. Dim letters
    4. letters = Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")
    5. For i = 0 to UBound(letters) - 1
    6. If fso.DriveExists(letters(i)) = False Then
    7. MsgBox(letters(i) & " is it")
    8. End If
    9. Next
    10. WScript.Quit
    Vielen Vielen Dank..

    Genau das war mein Ziel.

    Wegen A und B ist kein Problem. Ich lasse die Aufzählung einfach bei F: beginnen und bei R: aufhören.
    Mir gehts nur darum, einen freien Buchstaben zu finden, um eine Applikation über das Netzwerk zu starten.
    Danach wird das Laufwerk direkt wieder getrennt. Ist also nicht von Dauer.

    Meine Anwender haben leider willkürliche Laufwerksbuchstaben vergeben.
    Daher kann es sein, dass Buchstabe O bei dem einen Anwender frei ist, bei dem anderen aber wieder nicht.

    Und genau das erfüllt das Script nun.

    Nochmal vielen vielen Dank dafür. :thumbup: :thumbup:


    Viele Grüße

    p41n