Laufwerke nach AD Gruppe mappen

  • Hi,

    ich hab noch ein Problemchen. Damit das nicht zu unübersichtlich wird mach ich mal lieber einen neuen Thread auf.

    Spoiler anzeigen

    Lange Rede kurzer Sinn:

    Die User in der Gruppe alle sollen V und W bekommen.
    Die die nicht in Abteilung QPP sind R,S,T.
    Die die in AbteilungQPP oder AbteilungQPPzentrale sind Q.

    Das ist alles nicht so glücklich aber die AD Struktur gibt es nicht anders her :/
    Das funktioniert aber irgendwie nicht. Mein Testuser ist in alle und Abteilung QPP und bekommt nur Q 8|

    Sieht einer von euch wo ich den Fehler eingebaut hab?

    UPDATE: Wir kommen der Sache näher. Ich bekomme V, W und obwohl ich Q nicht bekommen sollte. User ist nicht mehr in Abteilung QPP

    Einmal editiert, zuletzt von Camulus (3. Dezember 2014 um 09:50)

  • Kann's nicht testen, aber folgende Zeilen machen mich stutzig. Du willst ja nur checken, ob der Suchbegriff im array vorkam oder nicht.
    Also statt:

    [autoit]

    If $QPP <> @error Or $QPPZ <> @error Then

    [/autoit]


    doch lieber

    [autoit]

    If $QPP <> -1 Or $QPPZ <> -1 Then

    [/autoit]

    durchläuft den Code wenn keine der beiden Variablen einen Fehler anzeigt.

  • Den Code könnte man auch etwas kürzen und somit lesbarer machen. Beispiel:

    [autoit]

    $QPP = _ArraySearch($aUser, "CN=AbteilungQPP", 0, 0, 0, 1)
    If $QPP <> -1 Then
    _DriveCheckState("R:", $R_PKV)
    _DriveCheckState("S:", $S_PKV)
    _DriveCheckState("T:", $T_PKV)
    EndIf

    [/autoit]
  • darf ich zwischenfragen warum Ihr die Laufwerke nicht einfach per GPO zuweist?

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hallo Camulus,

    benutzt du zum auslesen die Active Directory UDF von Water?

    Ich würde die Abteilungen und Zugehörige Laufwerke in ein Array aufnehmen und dann den unten stehenden Quelltext umbauen.

    Ist nur ein Beispiel, würde natürlich gleich auf die AD.au3 von Water greifen

    [autoit]


    #include <Array.au3>
    #include <D:\Data\scripte\AD_1.4.1.1_Functions\AD.au3>

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

    ; Open Connection to the Active Directory
    _AD_Open()
    If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)

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

    Local $acc[3][3]
    ;---------------------------
    $acc[0][0] = "Abteilung_Alle"
    $acc[0][1] = "V:|W:" ;ingroup
    $acc[0][2] = "" ;not ingroup
    ;--------------------------
    $acc[1][0] = "Abteilung_QPP"
    $acc[1][1] = "Q:" ;ingroup
    $acc[1][2] = "R:|S:|T:" ;not ingroup
    ;---------------------------
    $acc[2][0] = "Abteilung_QPPzentrale"
    $acc[2][1] = "Q:" ;ingroup
    $acc[2][2] = "" ;not ingroup

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

    Local $acc_path[6][2]
    $acc_path [0][0] = "Q:"
    $acc_path [0][1] = "\\Server01\"
    ;--------------------------
    $acc_path [1][0] = "R:"
    $acc_path [1][1] = "\\Server02\"
    ;--------------------------
    $acc_path [2][0] = "S:"
    $acc_path [2][1] = "\\Server03\"
    ;--------------------------
    $acc_path [3][0] = "T:"
    $acc_path [3][1] = "\\Server04\"
    ;--------------------------
    $acc_path [4][0] = "V:"
    $acc_path [4][1] = "\\Server05\"
    ;--------------------------
    $acc_path [5][0] = "W:"
    $acc_path [5][1] = "\\Server06\"

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

    ;_ArrayDisplay($acc_path)

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

    For $x = 0 to UBound ($acc) -1
    ;MsgBox(0,"", $acc[$x][0] & @CRLF & $acc[$x][1] & @CRLF & $acc[$x][2])
    $drive_ingroup = StringSplit ($acc[$x][1],"|") ;select drive ingroup
    $drive_not_ingroup = StringSplit ($acc[$x][2],"|") ;select drive not ingroup

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

    If _AD_IsMemberOf($acc[$x][0],@username) = 1 then
    ;MsgBox(0, "AD",$acc[$x][0] & " in der Gruppe")
    For $d = 1 to UBound ($drive_ingroup) -1
    ;MsgBox(0,"ingroup",$drive_ingroup[$d])
    IF Not $drive_ingroup[$d] = "" Then
    For $i = 0 to UBound ($acc_path) -1
    IF $acc_path[$i][0] = $drive_ingroup[$d] Then
    Drive_Map($acc_path[$i][0],$acc_path[$i][1])
    ;MsgBox(0,"1ingroup",$acc_path[$i][0] & $acc_path[$i][1])
    ExitLoop
    EndIf
    Next
    EndIf
    Next
    Else
    ;MsgBox(0, "AD", $acc[$x][0] & " nicht in der Gruppe")
    For $d = 1 to UBound ($drive_not_ingroup)-1
    ;MsgBox(0,"not ingroup",$drive_not_ingroup[$d])
    IF Not $drive_not_ingroup[$d] = "" Then
    For $i = 0 to UBound ($acc_path)-1
    ;MsgBox(0,"1not ingroup",$drive_ingroup[$d] & " " & $acc_path[$i][0])
    IF $acc_path[$i][0] = $drive_not_ingroup[$d] Then
    Drive_Map($acc_path[$i][0],$acc_path[$i][1])
    ;MsgBox(0,"1not ingroup",$acc_path[$i][0] & $acc_path[$i][1])
    ExitLoop
    EndIf
    Next
    EndIf
    Next
    EndIf

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

    Next

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

    ; Close Connection to the Active Directory
    _AD_Close()

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

    Func Drive_Map($drive,$drivepath)

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

    DriveMapDel($drive)
    Sleep(1000)

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

    $drive_use = DriveStatus($drive)
    ;MsgBox(0,"test", $abc,1)

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

    If $drive_use = "INVALID" Then
    DriveMapAdd($drive, $drivepath, 0);"domain\" & $ADMINUSER,$ADMINPASS)
    ;MsgBox(0,"V:\Laufwerk", "Verbindung hergestellt",1)
    EndIf

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

    EndFunc

    [/autoit]


    Was noch nicht übergeben wird, ist der Laufwerkspfad! Der müsste dann noch im Array hinterlegt werden.

    gruß gmmg

    7 Mal editiert, zuletzt von gmmg (5. Dezember 2014 um 16:59)