Netzwerkverbindungen ohne Laufwerksbuchstaben trennen

  • moin ...
    ... ersma ein "aloha" an alle ... bin ja "brandnew" hier ...

    Ich bastel zwar schon länger mit AutoIT herum, habe aber nun ein Problem, dass ich nicht lösen kann ...
    Zur Beschreibung:

    wenn ich ein Netzlaufwerk gemapt habe, kann ich ja mit DriveMapDel dieses auch wieder entfernen ...
    wenn ich allerdings im Explorer per UNC-Pfad eine Verbindung zu einer Gegenstelle aufbaue (\\server\freigabe), so hat diese ja keinen Laufwerksbuchstaben ...
    öffne ich nun auf dieser Freigabe eine Datei und schließe diese Verbindung wieder, so kann ich mich ja nicht mehr unter einem anderen Usernamen mit dieser Freigabe verbinden, weil dies ja dann immer im Fehler 1219 (Mehrfachverbindungen unzulässig) resultiert.
    in der kommandozeile ist diese Verbindung dann auch mit "net use" sichtbar ...

    ich muss mich also abmelden und erneut anmelden, damit ich die Verbindung mit einem anderen Usernamen aufbauen kann ...
    oder ich verwende "net use * /del /y" ... dann sind allerdings auch die netzlaufwerke mit Laufwerksbuchstaben weg ...

    um nun dieses abmelden/anmelden zu umgehen, bin ich auf der Suche nach einer Lösung, um alle Netzlaufwerk-Verbindungen zu trennen, die nicht mit einem Laufwerksbuchstaben verbunden wurden ...
    oder anders ausgedrückt: ich will nur die UNC-Verbindungen kappen, nicht aber die netzlaufwerke ...

    mir schwebt da in etwa vor, alle Verbindungen auszulesen in ein array, dann alle Einträge rauswerfen, die einen Laufwerksbuchstaben verwenden und dann die verbliebenen trennen ...
    nur leider finde ich dazu in den Befehlen keinen Ansatz ... oder ich übersehe was ... oder ich suche in den falschen Ecken ...

    vielleicht kann mir ja jemand auf die Sprünge helfen ...

    danke im voraus ...

  • C:\Users\Dietmar>net use
    Neue Verbindungen werden gespeichert.


    Status Lokal Remote Netzwerk

    ---------------------------------------------------------------------------
    OK \\vdr02\IPC$ Microsoft Windows Network

    mit netuse /del \\vdr02\IPC$ würde man diese Verbindung wieder los.

    Lokal ist nicht gepflegt, vielleicht hilft Dir das weiter?


    Wichtig Windows gestattet nur eine Verbindung von dem PC/der Sitzung.
    Multiples Anmelden an div. Shares vom selben PC funktionieren nur mit "einer" Anmeldung.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • habe nun die Idee, die ausgabe von net use in eine Datei umzuleiten, diese dann zu durchforsten und die Verbindungen zu kappen ...
    etwa so:

    [autoit]

    #include <file.au3>
    Dim $aRecords
    Run("net use > d:\unc.lst", "", @SW_HIDE)
    If Not _FileReadToArray("d:\unc.lst",$aRecords) Then
    MsgBox(4096,"FEHLER", " Fehler beim Lesen der Verbindungsdaten")
    Exit
    EndIf
    For $x = 1 to $aRecords[0]
    if StringInStr($aRecords[$x],"\\") then
    if not StringInStr($aRecords[$x],":") Then
    Msgbox(0,'Verbindung:' & $x, $aRecords[$x])
    Run("net use "&$aRecords[$x]&" /del /y")
    endif
    EndIf
    Next
    Run("del d:\unc.lst")

    [/autoit]

    allerdings passiert irgendwie nix ...
    die Datei wird nicht angelegt ...
    habe ich da einen Denkfehler?

    unter der Kommandozeile wird mir mit

    Code
    net use > d:\unc.lst


    die Ausgabe in die Datei unc.lst umgeleitet, die ich dann auswerten kann ...

  • [autoit]

    Run(@ComSpec & " /c " & 'net use > d:\unc.lst', "", @SW_HIDE)

    [/autoit]

    klappt hier auch ohne UAC usw.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Du brauchst die Ausgabe nicht in eine Datei umzuleiten:

    Spoiler anzeigen
    [autoit]

    Local $PID = Run(@ComSpec & " /c " & 'net use', "", @SW_HIDE, 0x2)
    Local $Line
    While 1
    $Line &= StdoutRead($PID)
    If @error Then ExitLoop
    Wend

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "Ausgabe von 'net use':", $line)

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Dietmar
    klappt einwandfrei mit Verbindungen zu einer SharePoint Bibliothek ...
    Nur statt "Run" muss ich "RunWait" verwenden, da ansonsten die nachfolgende Zeile mit FileReadToArray auf einen Fehler läuft ...
    funkey
    sieht nice aus ...
    werde ich mal antesten ...

    Nachtrag:
    Klappt allerdings leider nur, solange "\\" auch die ersten Zeichen der Zeile sind, wie es bei einer Sharepoint-Verbindung der Fall ist ...

    Bei einer Verbindung zu einer anderen Netzfreigabe im lokalen Netzwerk sieht die Zeile leider anders aus:
    OK \\server\freigabe Microsoft Windows Network

    jemand 'n fixen Tipp, wie man den String nach "\\" durchsucht, um dann nur "\\server\freigabe" herauszupicken?
    von "\\" bis zum nächsten Leerzeichen reicht ja nicht, da die Freigabe ja auch Leerzeichen enthalten könnte ...

    ich hänge da wohl gerade in einem Denkfehler fest:

    Spoiler anzeigen
    [autoit]

    StringSplit("OK \\server.vhs.local\vhs Microsoft Windows Network","\\",1)
    $uncpath = StringSplit("server.vhs.local\vhs Microsoft Windows Network"," ",1)
    MsgBox(0, "path", "\\"&$uncpath[1])

    [/autoit]


    damit komme ich schon mal zu dem gewünschten Ergebnis ...

    aber funkey:
    ich blicke nicht so ganz durch, wie ich Deine Variante hierfür verwenden kann ...
    irgendwie schaffe ich es nicht, die "$Line" nur zeilenweise zu erfassen, damit ich jede Zeile auswerten kann ...

    3 Mal editiert, zuletzt von elmuchacho (2. März 2010 um 21:19)