Netzwerklaufwerke: Win32_MappedLogicalDisk & DriveInfo.GetDrives

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von JackCimberly.

    Netzwerklaufwerke: Win32_MappedLogicalDisk & DriveInfo.GetDrives

    Hallo Gemeinde.

    Da es in VB.net leider keine gute Möglichkeit gibt, die Netzlaufwerke auszulesen, Snippets mit zweierlei Abfragen.

    Function, mit dieser möchte ich den UNC-Pfad ermitteln.

    VB.NET-Quellcode

    1. Public Function getDriveInfo(ByVal sDriveLetter As String) As String
    2. Dim sProvider As New ManagementObjectSearcher("Select ProviderName FROM Win32_MappedLogicalDisk WHERE DeviceID='" & sDriveLetter & "'")
    3. Dim vReturnString As String = CType(False, String)
    4. For Each mapping As ManagementObject In sProvider.Get()
    5. vReturnString = CType(mapping("ProviderName"), String)
    6. Next
    7. Return vReturnString
    8. End Function


    Netzwerk-Laufwerke auslesen:

    VB.NET-Quellcode

    1. For Each Drive As DriveInfo In DriveInfo.GetDrives
    2. If Drive.DriveType = IO.DriveType.Network Then
    3. If Drive.IsReady Then
    4. CheckedListBox2.Items.Add(Drive.Name & " [" & getDriveInfo(Drive.Name) & "]")
    5. Else
    6. CheckedListBox2.Items.Add(Drive.Name & " [nicht bereit]")
    7. End If
    8. End If
    9. Next


    Beim Ausführen wirft der mir eine Exception:
    System.Management.ManagementException: Die Anfrage ist ist ungültig
    Fehler zeigt auf das Next aus der Funktion.

    Wo liegt da jetzt der Fehler ... und kann man diesen beheben?
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren
    @JackCimberly mapping ist ggf. Nothing, da musst Du mal durchsteppen und das aufklären:

    Gugst Du
    Debuggen, Fehler finden und beseitigen
    Nimm zum Test die Netz-Laufwerk-Abfrage raus.
    ==================
    Der Fehler kommt bereits in dieser Zeile:

    VB.NET-Quellcode

    1. For Each mapping As ManagementObject In sProvider.Get()
    Ich denke, diese Abfrage ist falsch:

    VB.NET-Quellcode

    1. New ManagementObjectSearcher("Select ProviderName FROM Win32_MappedLogicalDisk WHERE DeviceID='" & sDriveLetter & "'")

    ==================
    Das Laufwerk darf nicht auf einen \ enden, dann funktioniert es:

    VB.NET-Quellcode

    1. driveLetter = driveLetter.TrimEnd("\"c)
    vor New ManagementObjectSearcher()

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    Ja, so in etwa.

    Aufgrund Deines Tipps ​mapping bin ich auch darauf gekommen.

    Problem war, dass das Laufwerk mit einem Back-Slash endet.

    Lösung:

    VB.NET-Quellcode

    1. Public Function getDriveInfo(ByVal sDriveLetter As String) As String
    2. Dim _sDriveLetter As String = sDriveLetter.Replace("\", "")
    3. Dim sProvider As New ManagementObjectSearcher("Select ProviderName FROM Win32_MappedLogicalDisk WHERE DeviceID='" & _sDriveLetter & "'")
    4. Dim vReturnString As String = ""
    5. For Each mapping As ManagementObject In sProvider.Get()
    6. vReturnString = CType(mapping("ProviderName"), String)
    7. Next
    8. Return vReturnString
    9. End Function
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „JackCimberly“ ()