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

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...

  • 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)