ICACLS: Ich finde den Fehler einfach nicht

  • Hallo zusammen.

    Ich habe 2 Sachen Programmiert, der erste Block funktioniert und der zweite nicht! Ich finde den Fehler nicht, obwohl alles korrekt in der MSGBox und _ArrayDisplay angezeigt wird.

    Vielleicht kann mir einer von Euch sagen, was nicht stimmt.

    Es geht um die beiden Blöcke wo ich mit ICACLS die Rechte auf Ordner vergeben möchte. Der erste Block mit (Zeile 12 bis 20) funzt und der zweite mit Block (Zeile 23 bis 30) funktioniert nicht.

    Vielen Dank!!

    Gruß

    Sirius

    Spoiler anzeigen
  • Seitens AutoIt scheint dann ja alles ok zu sein und der Fehler tritt womöglich bei ICACLS auf, von dem du, weil du es mit Run() startest, keinen 'exit code' bekommst.

    Ich würde aber in jedem Fall wissen wollen ob der Befehl ohne Fehler ausgeführt wurde... und daher den Befehl mit RunWait() starten...

    Local $iError = RunWait('"' & @ComSpec & '" /c ICACLS "' & $OAWPath & $OAWList[$i] & '" /grant:r Innendienst:(S,RD,WD,AD,REA,X,RA) /T', '', @SW_HIDE)
    If $iError <> 0 Then ...

  • Hi Bitnugger,

    ich hab das mal getestet. Es wird weder beim 1. noch beim 2. Block ein Fehler angezeigt. Zudem der 1. Block ja auch komplett funktioniert!

    Hast du sonst noch eine Idee?

    Gruß

    Sirius

  • Ich hab noch was anderes versucht.

    Local $iError = RunWait('"' & @ComSpec & '" /c ICACLS "' & $OAWPath & $OAWList[$i] & '" /grant:r Innendienst:(S,RD,WD,AD,REA,X,RA) /T', '', @SW_HIDE)
    MsgBox(0, "Programm gab folgenden Exitcode zurück:", $iError)

    Komisch ist, dass er 0 (Fehler) ausgibt, aber der Befehl korrekt ausgeführt wurde. Also die Berechtigungen wurde genau so gesetzt wie im Script befohlen!

    Und nun?

    Gruß
    Sirius

  • So... ich bin einen Schritt weiter! :)

    Irgendwas funktioniert mit der For-Schleife nicht!


    • For $i = 1 To $OASCHList[26]
    • Run('"' & @ComSpec & '" /c ICACLS "' & $OASCHPath & $OASCHList[$i] & '" /grant:r Innendienst:(S,RD,WD,AD,REA,X,RA) /T', '', @SW_HIDE)
    • Run('"' & @ComSpec & '" /c ICACLS "' & $OASCHPath & $OASCHList[$i] & '" /grant:r Innendienst:(OI)(CI)(IO)(F) /T', '', @SW_HIDE)
    • Next

    Ich finde den Fehler aber nicht, weil wenn ich den Array mit _ArrayDisplay anzeigen lasse, dann zeigt er mir ja an, wie viele Ordner sich in dem Ordner befinden.

    Der gleiche Code auf anderen Ordnern funktioniert, nur da nicht.

    RATLOS!

  • Wenn es jemanden interessiert! Ich habe den Fehler gefunden

    Ich habe einfach folgendes verändert:

    • For $i = 1 To $OASCHList[26]

    in

    • For $i = 1 To $OASCHList[0]

    Gruß
    Sirius

  • $iError liefert dir den 'exit code' von @ComSpec bzw. ICACLS zurück - und wenn die Heinzelmännchen es nicht geändert haben, bedeutet 0 (%ERRORLEVEL% = 0) immer noch, dass KEIN Fehler aufgetreten ist. ;)

    Bash
    ICACLS ...
    
    
    if %ERRORLEVEL% EQU 0 @echo Alles easy gelaufen!

    RunWait
    Return Value

    Success: the exit code of the program that was run.
    Failure: sets the @error flag to non-zero.

    ...wobei ich allerdings bei RunWait noch nie gesehen habe, dass @error <> 0 ist, obwohl ich den schon sehr oft benutzt habe.



    Ausgabe:

    --> Press Ctrl+Alt+F5 to Restart or Ctrl+Break to Stop
    ! ScriptLineNumber: 12 ICACLS exit code: 0 #Error: 0 #Extended: 0
    > Bearbeitete Datei: m:\ICACLSTESTDIR
    > 1 Dateien erfolgreich verarbeitet, bei 0 Dateien ist ein Verarbeitungsfehler aufgetreten.

    ! ScriptLineNumber: 13 ICACLS exit code: 0 #Error: 0 #Extended: 0
    > Bearbeitete Datei: m:\ICACLSTESTDIR
    > 1 Dateien erfolgreich verarbeitet, bei 0 Dateien ist ein Verarbeitungsfehler aufgetreten.

    +>17:08:27 AutoIt3.exe ended.rc:0


    Nachtrag:

    For $i = 1 To $OASCHList[26]

    Feste Werte zu verwenden, um ein Array auszulesen, ist i.d.R. eh unfein... aber ich dachte mir, das macht er, weil er ganz sicher ist, dass die Größe des Arrays konstant ist.

    Wenn kein Zähler in $Array[0] ist, mache ich es mit UBound($Array)

    Einmal editiert, zuletzt von Bitnugger (9. Juli 2015 um 17:41)