Wie bau ich am besten die Schleife ein

  • Hallo,


    ich steh mal wieder völlig aufm Schlauch, oder seh den Wald vor lauter Bäumen nicht.

    Ich habe ein Script das nach AD Gruppenzugehörigkeit Laufwerke mappt. Falls das jetzt aus irgendeinem Grund nicht funktioniert soll es insgesamt dreimal versucht werden.

    Wenns dann immer noch nicht geklappt hat soll halt ne entsprechende Meldung ausgegeben werden.

    So soeht das bei mir aus:

    Schnipsel:

    [autoit]


    If Not @error Then
    DriveMapDel("G:")
    _WriteLogData("Laufwerk G:\ getrennt.")
    DriveMapDel("H:")
    _WriteLogData("Laufwerk H:\ getrennt.")
    DriveMapAdd("G:", \\domäne.local\dfs\Abteilung)
    ;~ DriveMapAdd("G:", "\\domäne.local\dfs\Abteilung",0,@LogonDomain & "\"& @UserName)

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

    If @error Then
    $Error = @error
    $Laufwerk = "G:\"
    _ErrorLog($Error, $Laufwerk)
    Else
    $Error = ""
    $Laufwerk = ""
    If WinActive ("Connect") Then
    ControlSetText("Connect","",5,@CRLF & @CRLF & "Netzlaufwerke werden verbunden," & @CRLF & @CRLF & "Laufwerk G:\ erfolgreich verbunden.")
    Sleep(250)
    _WriteLogData("Laufwerk G:\ verbunden.")
    ElseIf WinActive ("VPN- Status") Then
    ControlSetText("VPN- Status","",11, "Netzlaufwerke werden verbunden," & @CRLF & "Laufwerk G:\ erfolgreich verbunden.")
    Sleep(250)
    _WriteLogData("Laufwerk G:\ aus Childform verbunden.")
    EndIf

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

    EndIf

    [/autoit]


    Ich habs mit einer For Next Schleife versucht aber das klappt nicht wie ich will. Warscheinlich ist es wieder ganz einfach und ich stell mich nur zu blöd. :S

    Einmal editiert, zuletzt von Camulus (4. Juli 2012 um 15:23)

  • Beim Code blicke ich gerade nicht wirklich durch... Du könntest aber die komplette Abfrage in eine Funktion packen und bei Erfolg dann 1 returnen; bei Misserfolg 0.
    Dann geht es nach dieser Struktur:

    [autoit]

    For $i = 0 To 2
    $i_Ret = foo () ; Deine Funktion...
    If $i_Ret = 1 Then ExitLoop
    Next

    If $i_Ret = 1 Then
    MsgBox (0, '', 'Erfolg')
    Else
    MsgBox (0, '', 'Misserfolg')
    EndIf

    [/autoit]
  • Bei deinem Code sehe ich leider die Prüfung der Laufwerke nicht. Der Code beginnt ja schon mit der Auswertung von @error.

    Davor müsstest Du wie bereits beschrieben mit einer For-Schleife arbeiten. Kannst Du den fehlenden Codeteil mal posten?

  • Ich würde es, basierend auf dem "Code-Schnipsel", so verändern:

    Spoiler anzeigen
    [autoit]

    If Not @error Then
    DriveMapDel("G:")
    _WriteLogData("Laufwerk G:\ getrennt.")
    DriveMapDel("H:")
    _WriteLogData("Laufwerk H:\ getrennt.")
    $count = 0
    Do
    DriveMapAdd("G:", \\domäne.local\dfs\Abteilung)
    $error = @error
    If $error Then
    $count += 1
    Else
    ExitLoop
    EndIf
    Until $count >= 3
    If $count >= 3 Then
    $Laufwerk = "G:\"
    _ErrorLog($Error, $Laufwerk)
    Else
    $Error = ""
    $Laufwerk = ""
    If WinActive ("Connect") Then
    ControlSetText("Connect","",5,@CRLF & @CRLF & "Netzlaufwerke werden verbunden," & @CRLF & @CRLF & "Laufwerk G:\ erfolgreich verbunden.")
    Sleep(250)
    _WriteLogData("Laufwerk G:\ verbunden.")
    ElseIf WinActive ("VPN- Status") Then
    ControlSetText("VPN- Status","",11, "Netzlaufwerke werden verbunden," & @CRLF & "Laufwerk G:\ erfolgreich verbunden.")
    Sleep(250)
    _WriteLogData("Laufwerk G:\ aus Childform verbunden.")
    EndIf
    EndIf

    [/autoit]

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"