Hi,
ich hab ein kleines Problemchen mit einer Schleife.
Das stammt aus diesem Beitrag hier.
https://autoit.de/index.php/Thre…sten-dynamisch/
Aber da das generell gelöst ist mach ich mal einen neuen auf.
Ich denke ich hab das nur falsch zusammen gebaut.
So sieht das aus:
Func _checkDrives()
;~ Laufwerke checken
$aArray = IniReadSection(@ScriptDir &"\netzlaufwerke.ini", "Groups")
;~ MsgBox(0,"","vor ADopen")
_AD_Open()
For $i = 1 To $aArray[0][0]
$is_member = 0
$is_member = _AD_IsMemberOf($aArray[$i][1], @UserName)
If $is_member = 1 Then
$aArray_MAPDRIVE = IniReadSection(@ScriptDir &"\netzlaufwerke.ini", $aArray[$i][1])
_ArrayDisplay ($aArray_MAPDRIVE)
EndIf
Next
_AD_Close()
For $x = 1 To $aArray_MAPDRIVE[0][0]
Sleep(500)
MsgBox(0,"Schleife", $X,1)
$map_details = StringSplit($aArray_MAPDRIVE[$x][1],"|")
$map_details[1] = StringReplace($map_details[1], "*USER*", @username)
$Laufwerk =($map_details[2] & ":")
$Pfad =($map_details[1])
;~ If $Ping > 0 Then
$Status=DriveStatus($Laufwerk)
;~ MsgBox(0,"",$Status & " " & $Laufwerk,1)
If $Status = "INVALID" Then
$count =0
Do
_MapDrives($Laufwerk,$Pfad)
Sleep(1000)
If @error Then
$Error = @error
MsgBox(0,"",$Error)
$count +=1
_WriteLogData("Laufwerk " & $Laufwerk &" nicht neu verbunden. Fehlversuch:" & $count)
Else
ExitLoop
EndIf
Until $count >= 3
If $count >=3 Then
$Error = @error
;~ _ErrorLog($Error, $Laufwerk)
Else
$Error = ""
EndIf
EndIf
Next
EndFunc
Alles anzeigen
Jetzt bekomme ich zwei mal ein Array angezeigt was auch stimmt weil mein Testuser in zwei Gruppen aus der Netzlaufwerke.ini ist.
Die MessageBox mit dem Titel Schleife kommt dann auch zweimal was auch richtig ist weil zwei Laufwerke je Gruppe verbunden werden sollen.
Aber das passt alles nicht immer weil erst zweimal das Array gebildet wird und dann erst die Laufwerke verbunden werden.
Ich denke die beiden For Schleifen müssten verschachtelt werden, aber das hab ich noch nicht zufriedenstellend gelöst.
Ich bilde mir ein:
Wenn der User in 2 Gruppen ist müsste erst das Array gebildet werden (1.Gruppe) dann die Laufwerke verbinden und dann das zweite Array (2.Gruppe) und die zugehörigen Laufwerke
Die ini Datei ist so aufgebaut
[Groups]
1=GRP_Abteilung_IT
2=Alle_xyz
[GRP_Abteilung_IT]
1=\\domain\dfs\Home$\*USER*|H
2=\\domain\dfs\software|S
[Alle_xyz]
1=\\domain\dfs\Gruppen|V
2=\\domain\dfs\Benutzer|W
Alles anzeigen
EDIT:
Ich glaub ich habs.
$aArray = IniReadSection(@ScriptDir &"\netzlaufwerke.ini", "Groups")
_AD_Open()
For $i = 1 To $aArray[0][0]
$is_member = 0
$is_member = _AD_IsMemberOf($aArray[$i][1], @UserName)
If $is_member = 1 Then
$aArray_MAPDRIVE = IniReadSection(@ScriptDir &"\netzlaufwerke.ini", $aArray[$i][1])
;~
For $x = 1 To $aArray_MAPDRIVE[0][0]
$map_details = StringSplit($aArray_MAPDRIVE[$x][1],"|")
$map_details[1] = StringReplace($map_details[1], "*USER*", @username)
$Laufwerk =($map_details[2] & ":")
$Pfad =($map_details[1])
$Status=DriveStatus($Laufwerk)
If $Status = "INVALID" Then
$count =0
Do
_MapDrives($Laufwerk,$Pfad)
Sleep(1000)
If @error Then
$Error = @error
MsgBox(0,"",$Error)
$count +=1
_WriteLogData("Laufwerk " & $Laufwerk &" nicht neu verbunden. Fehlversuch:" & $count)
Else
ExitLoop
EndIf
Until $count >= 3
If $count >=3 Then
$Error = @error
Else
$Error = ""
EndIf
$Status = ""
$Laufwerk = ""
$count= 0
$Drive=""
EndIf
Next
EndIf
Next
_AD_Close()
Alles anzeigen
Scheint erst mal zu funktionieren.
Wenn jemand was eleganteres hat immer raus damit;)