Rückgabewert auswerten / Progessbar

  • Hallo,

    ich habe ein Script geschrieben das in einer Domäne an den lokalen PCs verschiedene Einstellungen vornimmt die Benutzerbezogen sind.
    Nun möchte ich gerne wissen wie ich es machen muss um z.B. beim Befehl
    FileCopy den Rückgabewert in eine Textdatei schreiben zu können.

    Es soll also in eine Textdatei geschrieben werden ob die verschiedenen Befehle erfolgreich waren oder nicht. Die Textdatei könnte ich mir dann auf den Server kopieren lassen um auszuwerten bei welchen PCs es Probleme gab.

    Aus optischen Gründen habe ich eine Progressbar mit eingebaut. Hier habe ich das Problem das diese bis Funktion durchläuft und erst anschließend erfolgen die eigentlichen Befehl. Wie muss ich das ändern damit die Befehle und die Progressbar gleichzeitig laufen?

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <Process.au3>
    #include <file.au3>
    ; == GUI generated with Koda ==
    $LogonKnarr = GUICreate("LogonKnarr", 295, 232, -1, -1, BitOR($WS_MINIMIZEBOX,$WS_CAPTION,$WS_GROUP,$WS_BORDER,$WS_CLIPSIBLINGS))
    $Pic1 = GUICtrlCreatePic(@LogonServer & "\netlogon\Knarr-LOGO.jpg", 44, 40, 210, 100, BitOR($SS_NOTIFY,$WS_GROUP))
    $Progress1 = GUICtrlCreateProgress(74, 176, 150, 17)
    GUICtrlSetColor(-1, 0xB2B4BF)
    $Version = GUICtrlCreateLabel("Version 0.12", 96, 200, 150, 28)
    GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    #NoTrayIcon
    $user = @UserName ; Für Funktion myGetSID
    $var = StringSplit(myGetSID($user), @TAB) ;Für Funktion myGetSID
    $wait = 20; wait 20ms for next progressstep
    $s = 0; progressbar-saveposition

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

    For $i = $s To 100
    $s = $i;save the current bar-position to $s
    GUICtrlSetData($Progress1,$i)
    Sleep($wait)
    Next
    If $i >100 Then
    $s=0
    EndIf

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

    Opt("OnExitFunc","OnAutoItExit");"OnAutoItExit" called
    Func OnAutoItExit ( )
    _FileWriteLog(@LogonServer & "\netlogon\Logs\" & @ComputerName & ".txt", "Exit #" & @exitCode)
    EndFunc

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

    Func myGetSID($User=@UserName, $Host=@ComputerName, $NurEiner=True)
    Local $wbemFlagReturnImmediately=0x10, $wbemFlagForwardOnly=0x20, $colItems=""
    Local $JaNein[2]=[True, False], $Gesucht="", $Output, $i, $s
    If $User="" Then $User=@UserName
    If StringInstr($Host, "\\")=1 Then $Host=StringMid($Host, 3)
    If $Host="" Then $Host="."
    $NurEiner=$JaNein[$NurEiner=False]
    $objWMIService=ObjGet("winmgmts:\\" &$Host &"\root\CIMV2")
    If IsObj($objWMIService) Then
    $colItems=$wbemFlagReturnImmediately+$wbemFlagForwardOnly
    $colItems=$objWMIService.ExecQuery("SELECT * FROM Win32_AccountSID", "WQL", $colItems)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $s=$objItem.Setting
    $s=StringMid($s, StringInStr($s, "SID=")+4) &@Tab
    $s&=StringMid($objItem.Element, StringInStr($objItem.Element, "Name=")+5)
    If StringInstr($s, Chr(34) &$User &Chr(34)) Then $Gesucht&=$s
    $OutPut&=StringReplace($s, Chr(34), "") &@Cr
    Next
    If $NurEiner Then Return StringReplace($Gesucht, Chr(34), "")
    Else
    Return "Keine WMI-Objekte gefunden für Klasse: Win32_AccountSID"
    Endif
    Else
    Return $Host &" ist nicht in diesem Netz.."
    EndIf
    EndFunc

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

    While 1
    If @UserName = "User1" Then _Abteilung1()
    WEnd

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

    Func _Abteilung1()
    ;Code für erste Funktion
    _Funktion2()
    EndFunc

    [/autoit]
  • Hi :)

    FIleWrite("123.txt",FileCopy("datei","datei2"))

    Würde bei erfolg eben den rückgabewert von filecopy in 123 schreiben :D

    das mit der progressbar hab ich nicht verstanden - sry :)

  • Danke für die schnelle Hilfe.
    Probier ich dann gleich mal aus.

    Das mit der Progressbar meine ich so:
    Diese läuft erstmal bis rechts ganz durch. Erst wenn die Progressbar fertig ist werden erst die eigentlichen Funktionen ausgeführt.
    Ich will es aber so haben das mit dem Start der Progressbar auch gleich Funktionen durchgeführt werden z.B. Progressbar ist bei 20% und gleichzeitig wird eine Datei an einen Zielort kopiert und nicht erst wenn die Progressbar bei 100% angelangt ist.

    • Offizieller Beitrag

    Hi,
    verwende doch einfach eine Log-Datei und leite die Auswertung der einzelnen Programmschritte sofort dahin um.
    Hier mal ein Bsp.:

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    Global $LogFile = 'LOG-DATEI'

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

    If _MyFunc() = -1 Then ; Funktionsaufruf mit gleichzeitiger Log-Funktion
    _FileWriteLog($LogTxt, '_MyFunc() Fehler: ' & @error)
    Else
    _FileWriteLog($LogTxt, '_MyFunc() OK')
    EndIf

    Func _MyFunc()
    ; Code
    ; Fehlerroutine (Eingaben abfragen etc.)
    ; wenn Fehler. SetError() evtl. je nach Fehler ErrorNummer setzen
    If @error Then
    Return -1 ; oder ErrorNummer mit @error
    Else
    Return 0 ; oder Funktionsergebnis
    EndIf
    EndFunc

    [/autoit]

    Die Progressbar setzt du ja sofort in einer Schleife. Klar, dass dann nichts anderes passiert.

    Du mußt die Anzahl der einzelnen Programmschritte/Funktionsaufrufe ermitteln.
    Nach jedem dieser Schritte setzt du dann die Progressbar.

  • Hallo Zusammen,

    Bin neu in Forum. Habe auch vor kurzem mit AutoIt angefangen und daher kenn ich mich recht wenig aus. Möchte Dateien von a nach b kopieren und dabei soll eine Progressbar angezeigt werden die aber den Kopiervorgang anzeigt. Kennt sich jemand damit aus? Wäre toll wenn Ihr mir helfen könntet. Danke ?( ?(