Netzlaufwerke verbinden am liebsten "dynamisch"

  • Hallo,

    vor etwas längerem hab ich mal diesen Thread erstellt:
    https://autoit.de/index.php/Thre…erke-verbinden/

    Das Tool gibt es immer noch und da Gruppenrichtlinien scheinbar auch nicht der Weisheit letzter Schuss sind überlege ich dranb es weiter zu entwickeln.
    Momentan stehen die Laufwerke und die Pfade in einer ini Datei und werden ausgelsen und demnach verbunden

    z.B. so

    Spoiler anzeigen
    Code
    Global $S_XYZ					=	IniRead(@ScriptDir & "\drives.ini","Drives", "S_XYZ","")
    Global $H_XYZ					=	IniRead(@ScriptDir & "\drives.ini","Drives", "H_XYZ","")
    Global $X_XYZ					=	IniRead(@ScriptDir & "\drives.ini","Drives", "X_XYZ","")



    Gemappt werden die dann so:

    Spoiler anzeigen


    was ganz sexy ist dass die Laufwerke auch regelmößig auf vorhendensein geprüft werden und falls nicht neu verbunden.

    Was mich noch ärgert ist dass alles recht statisch ist. Dumm ist dass ich kein Entwickler bin aber dennoch der einzige der AutoIT kennt ^^


    die ini Datei sieht so aus:


    Code
    S_XYZ="\\coo.local\dfs\software"
    X_XYZ="\\coo.local\dfs\XYZ"
    H_XYZ="\\coo.local\dfs\Home$\"

    Gibt es eine Möglichkeit das alles über die ini Datei zu "steuern"?
    Wenn z.B. ein Laufwerk dazu kommt oder weg fällt?
    Dass man das dann "nur" in der ini Datei anpasst und das Tool dieund Anzahl, Buchstaben und Pfade der Laufwerke und vielleicht auch die zugehörigen AD Gruppen "ausliesst".

    Und man nicht für jedes Laufwerk einen Programmschnipsel braucht? Sondern eher eine Schleife die dann x-mal (jenachdem was in der ini steht) das gleiche tut?


    Obwohl es seit Jahren "angeblich" nich mehr durch uns supportet wird muss man eben doch alle Jubeljahre mal was ändern und gerade diese Woche hätte es richtig geknallt wenn ich nicht da gewesen wäre und noch mal eben was hätte anpassen können :huh:


    Oder ist die Idee völliger Quatsch und es gibt einen wesentlich besseren Weg?


    Ach, das alles für 4 Domänen und 4 ADs aus denen die Gruppen ausgelesen werden :S:D

  • @ Camulus: Ich würde das anderes herum aufziehen.

    Alle Gruppen und LW je nach Gruppe in die Ini schreiben (siehe unten mal als Beispiel)

    mit IniReadSection die Gruppen aus der Ini in ein Array lesen und danach per Schleife abarbeiten.

    Ini


    Gruß gmmg

    Edit: Skripcode formatiert (auto)Bert

  • Ok, das ist eigentlich das was ich wollte...allerdings sind Arrays böhmiche Dörfer bei mir... das vergisst man immer alles wieder:

    So sieht es momentan aus:


    Und ich bekomme diesen Fehler:
    (14) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:


    Kann mir da noch jemand auf die Sprünge helfen?

    Einmal editiert, zuletzt von Camulus (20. September 2016 um 12:00)

  • Ich glaub ich hab es...
    oder hab ich jetzt Bockmist gebaut? :D

  • genau so sollte es gehen... :)

    im Anhang nochmal eine INI

  • Wir kommen der Sache näher.

    Aber jetzt hab ich ein Problem mit den Laufwerksbuchstaben.
    Due Idee war DriveMapAdd mit $aDrive zu füllen ,aber das geht natürlich nicht X/

    Die Buchstben unterscheiden sich natürlich nach Gruoppen;)

    Hat da noch jemand eine zündende Idee?

  • Ich bin noch etwas verwirrt wegeen dem Array bzw den Arrays und wie ich die Laufwerksbuchstaben verwurste. ?(

    Die Idee ist die Ini dann so aufzubauen


    [Groups]
    1=GRP_Abteilung_IT
    [GRP_Abteilung_IT]
    LW1="X:"
    Pfad1="\\xyz.local\dfs\software"

    Nur da hab ich dir richtige Kombination noch nicht;)

    Oder ist die Idee Qutasch?

  • mit in die Zeile vom Freigabepfad der die Ini schreiben


    INI

    bei deinem oberen Beispiel wird es komplizierter, wenn mehr als eine Freigabe verbunden werden soll ... zumindest sehe ich das so.

    Gruß gmmg

  • Eine Frage noch hinterher,

    angenommen der User ist in keiner der angegebenen Gruppen kommt scheinbar dieser Fehler
    (23) : ==> Subscript used on non-accessible variable.:
    For $i = 1 To $aArray_MAPDRIVE[0][0]
    For $i = 1 To $aArray_MAPDRIVE^ ERROR


    Ich habe es mit einer Gruppe getestet in der ich bin funktioniert Super,
    wenn ich die Gruppe in der ini umbenenne und ich dann in keiner mehr bin kommt dieser Fehler

    :huh:


    Zwei Fragen:
    Wenn ich in mehreren Gruppen bin scheint es auch nicht zu gehen


    ini:


    Am Rest hab ich nichts geändert, aber mein User ist in beiden Gruppen.
    fehler kommt keiner aber Z: wird nicht verbunden ?(

    2 Mal editiert, zuletzt von Camulus (20. September 2016 um 14:51)

  • so hier nochmal

    $is_member wurde in zeile 4 definiert und in in der For Next schleife Zeile 20 das $i durch $x ersetzt. Hier hatte es das $i hochgezählt und ist somit nicht in die richtige auswahl in der ersten For Schleife gesprungen.

    gruß gmmg

    2 Mal editiert, zuletzt von gmmg (20. September 2016 um 15:24)

  • So meinst du oder?

    Fehler:
    24) : ==> Subscript used on non-accessible variable.:
    For $i = 1 To $aArray_MAPDRIVE[0][0]
    For $i = 1 To $aArray_MAPDRIVE^ ERROR

    Wenn ich in keiner der beiden Gruppen bin

  • Aloha,
    ich nochmal.

    Mir ist nicht so ganz klar was heute Nacht passiert ist...heute geht es nicht mehr.
    Ich hab extra nochmal den Codeschnipsel oben raus kopiert aber dei Laufwerke werden nicht mehr verbunden.


    Ich hab mich mal rangetastet.


    Fehler 4 wenn ich das richtig gemacht habe meint der Device Name wäre ungültig ?(


    ini:


    kann mich da nochmal jemand erleuchten? :/

  • :S ich nehme alles zurück und behaupte das gegenteil
    Man muss schon die ini richtig bauen, da war ein \ zu viel.

    Aaaaaber ich hab ein anderes Prolem:
    Unsere Home Laufwerke sehen so aus:

    \\coo.local\dfs\Home$\%sername%

    Das $ scheint aber dafür zu sorgen dass das Laufwerk übergangen wird und die Variable %sername% finktionioert so auch nicht.
    Die Idee die ich hab ist abzufangen ob der Laufwerksbuchstabe H oder W ist, sind beide als Homelaufwerke festgelegt hier (mehrer Domänen).

    Oder gibt es was schlaueres was ich nicht weiß?

    So hab ich es gelöst:

    Code
    If $map_details[2] = "H" Then
    					$homelaufwerk= ($map_details[1] & "\Home$\"& @UserName)
    ;~ 					MsgBox(0,"Homelaufwerk",$homelaufwerk )
    ;~ 					MsgBox(0,"pfad",$map_details[2] & ":", & $homelaufwerk )
    					DriveMapAdd($map_details[2] & ":", $homelaufwerk )
    				EndIf

    funktioniert, wenn jemand eine bessere Idee hat nehm ich die auch gerne

    Einmal editiert, zuletzt von Camulus (21. September 2016 um 10:41)

  • Hallo,

    ist eigentlich ganz einfach :)

    in der ini machst du mal aus \\coo.local\dfs\Home$\%username% folgendes \\coo.local\dfs\Home$\*USER*.

    im Quelltext kommt das hinzu ...


    $map_details = StringSplit($aArray_MAPDRIVE[$x][1],"|")
    $map_details[1] = StringReplace($map_details[1], "*USER*", @username)
    DriveMapAdd($map_details[2] & ":", $map_details[1])


    praktisch wird der String *USER* dann mit dem StringReplace in den Tatsächlichen Usernamen geändert.


    Gruß gmmg