Netzwerk Problem

  • Hallo @All...

    Ich habe ein Problem beim ermitteln von Laufwerken??? bzw. Ordnern???
    und quäl mich schon den ganzen Abend damit herum...
    Auch meine intensive Suche hat mir, bis auf einen unbeantworteten Post
    von BugFix, nicht geholfen... Hier der Post von BugFix : Klick mich
    Aber das Script zeigt bei mir auch keine Ergebnisse...

    Was ich genau möchte? ich versuchs mal zu beschreiben:

    Wenn ich folgendes eingebe:

    [autoit]

    FileSelectFolder("", @LogonServer)

    [/autoit]


    wird mir ja das Netzwerk meines PC's geöffnet angezeigt, also z.B mit
    folgenden Laufwerken??? bzw. Ordnern???: Bilder, Musik, usw...

    [autoit]

    $find = FileFindFirstFile(@LogonServer & "\Bilder\*.*")

    [/autoit]


    gibt 1 zurück, also alles Ok, und ich könnte z,B. die Verzeichnisstruktur einlesen...

    [autoit]

    $find = FileFindFirstFile(@LogonServer & "\*.*")

    [/autoit]


    gibt aber -1 aus, aber GENAU diese Laufwerke??? Ordner??? brauche ich,
    weil ich ja nie weiß, welche Laufwerke??? Ordner??? bei anderen Usern vorhanden sind (am besten in einem Array)...

    Knapp: Ich brauche genau das, was unter dem geöffneten Netzwerk bei FileSelectFolder steht in einem Array...

    Vielleicht hat BugFix ja trotz des unbeantworteten Post ne Lösung für mich...

    Vielen Dank schon mal im vorraus für Eure Lösungsvorschläge...

    MfG Diggidie

    Einmal editiert, zuletzt von Diggidie (18. April 2013 um 16:43)

  • Diggidie

    Vielleicht hilft Dir dieses Skript weiter:

    [autoit]

    ; Link: http://msdn.microsoft.com/en-us/library/…4(v=vs.85).aspx
    ; Link: http://msdn.microsoft.com/en-us/library/…9(v=vs.85).aspx

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

    Dim $fileshares = ObjGet('WinNT://./lanmanserver') ; As IADsFileService

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

    For $share In $fileshares
    ConsoleWrite(StringFormat('Freigabe:\t%s\n', $share.Name))
    ConsoleWrite(StringFormat('Lokaler Pfad:\t%s\n', $share.Path))
    ConsoleWrite(StringFormat('Beschreibung:\t%s\n', $share.Description))
    Next ; $share

    [/autoit]
  • Sind im Hauptverzeichnis des Servers nur Ordner gespeichert?
    In diesem Fall liegt das Problem in bei "*.*", da in den Ordnernamen wahrscheinlich keine Punkte vorkommen. Versuch's doch mal mit "*".

  • @ _mk_ : funktioniert, glaube ich, nur auf dem eigenen Rechner im Netzwerk (andere konnte ich nicht ansprechen)...
    @ James1337 : FileSelectFolder und FileFindFirstFile sollten nur zur Veranschaulichung des Problems dienen...

    Aber das Problem scheint gelöst!? Auf jeden Fall kann ich jetzt alle relevante Daten beziehen...

    Schritt 1 - Ermitteln welche Computer/Server im Netzwerk vorhanden sind :

    Spoiler anzeigen
    [autoit]

    ;http://www.autoitscript.com/forum/topic/91…post__p__655253

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

    #include <Array.au3>
    Global Const $SV_TYPE_WORKSTATION = 0x1
    Global Const $SV_TYPE_SERVER = 0x2
    Global Const $SV_TYPE_SQLSERVER = 0x4
    Global Const $SV_TYPE_DOMAIN_CTRL = 0x8
    Global Const $SV_TYPE_DOMAIN_BAKCTRL = 0x10
    Global Const $SV_TYPE_TIME_SOURCE = 0x20
    Global Const $SV_TYPE_AFP = 0x40
    Global Const $SV_TYPE_NOVELL = 0x80
    Global Const $SV_TYPE_DOMAIN_MEMBER = 0x100
    Global Const $SV_TYPE_PRINTQ_SERVER = 0x200
    Global Const $SV_TYPE_DIALIN_SERVER = 0x400
    Global Const $SV_TYPE_XENIX_SERVER = 0x800
    Global Const $SV_TYPE_NT = 0x1000
    Global Const $SV_TYPE_WFW = 0x2000
    Global Const $SV_TYPE_SERVER_MFPN = 0x4000
    Global Const $SV_TYPE_SERVER_NT = 0x8000
    Global Const $SV_TYPE_POTENTIAL_BROWSER = 0x10000
    Global Const $SV_TYPE_BACKUP_BROWSER = 0x20000
    Global Const $SV_TYPE_MASTER_BROWSER = 0x40000
    Global Const $SV_TYPE_DOMAIN_MASTER = 0x80000
    Global Const $SV_TYPE_WINDOWS = 0x400000
    Global Const $SV_TYPE_CLUSTER_NT = 0x1000000
    Global Const $SV_TYPE_TERMINALSERVER = 0x2000000
    Global Const $SV_TYPE_CLUSTER_VS_NT = 0x4000000
    Global Const $SV_TYPE_LOCAL_LIST_ONLY = 0x40000000
    Global Const $SV_TYPE_DOMAIN_ENUM = 0x80000000
    Global Const $SV_TYPE_ALL = 0xFFFFFFFF

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

    $aCompList = _NetServerEnum($SV_TYPE_WORKSTATION)

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

    _ArrayDisplay($aCompList)

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

    Func _NetServerEnum ($iSrvType = -1, $sDomain = '')
    Local $uBufPtr = DllStructCreate("ptr;int;int"), $res[1]=[0], $i
    Local $uRecord = DllStructCreate("dword;ptr"), $iRecLen = DllStructGetSize($uRecord)
    Local $uString = DllStructCreate("char[16]")
    Local $uDomain = DllStructCreate("byte[32]"), $pDomain = 0
    If Not ($sDomain='' Or $sDomain='*') Then
    DllStructSetData($uDomain, 1, StringToBinary($sDomain,2))
    $pDomain = DllStructGetPtr($uDomain)
    EndIf
    Local $ret = DllCall ("netapi32.dll", "int", "NetServerEnum", _
    "ptr", 0, "int", 100, _
    "ptr", DllStructGetPtr($uBufPtr,1), "int", -1, _
    "ptr", DllStructGetPtr($uBufPtr,2), _
    "ptr", DllStructGetPtr($uBufPtr,3), _
    "int", $iSrvType, "ptr", $pDomain, "int", 0 )
    If $ret[0] Then Return SetError(1, $ret[0], '')
    Local $res[DllStructGetData($uBufPtr,3)+1]=[DllStructGetData($uBufPtr,3)]
    For $i=1 To DllStructGetData($uBufPtr,3)
    Local $uRecord = DllStructCreate("dword;ptr", DllStructGetData($uBufPtr,1)+($i-1)*$iRecLen)
    Local $sNBName = DllStructCreate("byte[32]", DllStructGetData($uRecord,2))
    DllStructSetData($uString,1,BinaryToString(DllStructGetData($sNBName,1),2))
    $res[$i] = DllStructGetData($uString,1)
    Next
    $ret = DllCall ("netapi32.dll", "int", "NetApiBufferFree", "ptr", DllStructGetData($uBufPtr,1))
    Return $res
    EndFunc

    [/autoit]


    Schritt 2 - Die Freigegebenen Laufwerke/Ordner ermittel: (Hier statt @ComputerName, einen aus $aCompList ausgelesenen Wert übergeben)

    Spoiler anzeigen
    [autoit]

    #include <NetShare.au3>
    #include <Array.au3>

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

    Local $sFoundDrive

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

    $aInfo = _Net_Share_ShareEnum (@ComputerName)

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

    For $i = 1 To $aInfo[0][0]
    If _Net_Share_ResourceStr ($aInfo[$i][1]) = "Disk drive" Then $sFoundDrive &= $aInfo[$i][0] & "|"
    Next

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

    $aDrives = StringSplit(StringTrimRight($sFoundDrive, 1), "|")
    _ArrayDisplay($aDrives)

    [/autoit]

    Alles was danach als Ordner oder Dateien kommt, kann normal mit den File-Befehlen bearbeitet werden...

    Fall natürlich jemand einen besseren Weg hat, bitte her damit...

    MfG Diggidie