While , IF Problem

  • Hey,

    habe ein ekleines Problem mit meiner While Schleife,
    Kann mir jemand sagen was ich falsch mache?

    [autoit]

    Local $line
    ;
    While 1
    If FileExists('\\server\share\' & $ListViewText[1] & '.log') Then
    $line = FileRead('\\server\share\' & $ListViewText[1] & '.log')
    If StringInStr ($line, "Flag") Then
    MsgBox (0,"","String in Log vorhanden")
    Else
    MsgBox (0,"","String in log nicht vorhanden")
    ExitLoop
    ElseIf Ping($ListViewText[1], 1) ; Host anpingen
    If not @error Then RegRead("\\" & $ListViewText[1] & "\HKEY_LOCAL_MACHINE\SOFTWARE\xxx\Flag", "ProductName")
    if @error = 0 then
    MsgBox (0,"", "Flag eintrag x32 vorhanden")
    ExitLoop
    ElseIf Ping($ListViewText[1], 1) ; Host anpingen
    If not @error Then RegRead("\\" & $ListViewText[1] & "\HKEY_LOCAL_MACHINE\SOFTWARE\WoW64\xxx\Flag", "ProductName")
    if @error = 0 then
    MsgBox (0,"", "Flag eintrag x64 vorhanden")
    ExitLoop

    EndIf
    If @error Then ExitLoop
    Wend

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

    Gruß
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    2 Mal editiert, zuletzt von subzero007 (31. Juli 2009 um 06:23)

  • Hallo,
    ELSEIF´s waren in deinem Script nicht nötig.

    Spoiler anzeigen
    [autoit]

    Local $line
    Dim $ListViewText[2] = [1, "HOST"]

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

    ;
    While 1
    If FileExists('\\server\share\' & $ListViewText[1] & '.log') Then
    $line = FileRead('\\server\share\' & $ListViewText[1] & '.log')
    If StringInStr($line, "Flag") Then
    MsgBox(0, "", "String in Log vorhanden")
    Else
    MsgBox(0, "", "String in Swscan nicht vorhanden")
    ExitLoop
    EndIf
    Else
    Ping($ListViewText[1], 1) ; Host anpingen
    If @error Then
    MsgBox(0, 0, "Ping auf " & $ListViewText[1] & " nicht erfolgreich!")
    ExitLoop
    Else
    RegRead("\\" & $ListViewText[1] & "\HKEY_LOCAL_MACHINE\SOFTWARE\xxx\Flag", "ProductName")
    If @error = 0 Then
    MsgBox(0, "", "Flag eintrag x32 vorhanden")
    ExitLoop
    Else
    RegRead("\\" & $ListViewText[1] & "\HKEY_LOCAL_MACHINE\SOFTWARE\WoW64\xxx\Flag", "ProductName")
    If @error = 0 Then
    MsgBox(0, "", "Flag eintrag x64 vorhanden")
    ExitLoop
    EndIf
    EndIf
    EndIf
    EndIf
    WEnd

    [/autoit]


    Es ist generell in solchen Fällen sinnvoll, sich mit einigen Strichen einen kurzen Ablaufplan aufzuzeichnen bzw. mit eigenen Worten aufzuschreiben, und diesen dann GENAU so umzusetzen^^
    Also:

    ciao
    Andy

    ps: Wenn du mit Scite arbeitest, zwischendurch ab und zu mal CTRL+t drücken oder bei Tools den Tidy anwerfen....

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (30. Juli 2009 um 10:52)

  • Hey,

    was mache ich falsch meine func _reg() springt nicht an ???

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <array.au3>
    #include <File.au3>
    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>

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

    GUICreate('Shutdown-Tool', 900, 700)
    $hListView = GUICtrlCreateListView('AD Computer', 10, 190, 210, 450)
    GUICtrlSendMsg($hListView, $LVM_SETCOLUMNWIDTH, 0, 200) ; setzt die erste Spalte des Listviews auf 560 Pixel Breite
    $hListViewon = GUICtrlCreateListView('Online Computer', 230, 190, 210, 450)
    GUICtrlSendMsg($hListViewon, $LVM_SETCOLUMNWIDTH, 0, 200) ; setzt die erste Spalte des Listviews auf 560 Pixel Breite
    $hListViewflag = GUICtrlCreateListView('No Shutdown Flag|error', 450, 190, 210, 450)
    ;GUICtrlSendMsg($hListViewflag, $LVM_SETCOLUMNWIDTH, 0, 200) ; setzt die erste Spalte des Listviews auf 560 Pixel Breite
    $hListViewSH = GUICtrlCreateListView('Shutdown|error', 670, 190, 210, 450)
    ;GUICtrlSendMsg($hListViewSH, $LVM_SETCOLUMNWIDTH, 0, 200) ; setzt die erste Spalte des Listviews auf 560 Pixel Breite

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

    $hButton = GUICtrlCreateButton('AD Auslesen', 10, 650, 80, 20)
    GUISetState()
    $countAD = GUICtrlCreateLabel("", 170, 170, 65, 25)
    $countON = GUICtrlCreateLabel("", 390, 170, 65, 25)
    $countflag = GUICtrlCreateLabel("", 610, 170, 65, 25)
    $countsh = GUICtrlCreateLabel("", 840, 170, 65, 25)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $hButton
    ;RunWait(@ComSpec & " /c " & 'F:\autoit\entwicklung\admin_tool\tools\gruppen.cmd', "", @SW_HIDE)
    NewItems1()
    _pingall()
    EndSwitch
    WEnd

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

    Func _count()
    $lv1count = _GUICtrlListView_GetItemCount($hListView)
    $lv2count = _GUICtrlListView_GetItemCount($hListViewon)
    $lv3count = _GUICtrlListView_GetItemCount($hListViewflag)
    $lv4count = _GUICtrlListView_GetItemCount($hListViewSH)

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

    GUICtrlSetData($countAD, $lv1count)
    GUICtrlSetData($countON, $lv2count)
    GUICtrlSetData($countflag, $lv3count)
    GUICtrlSetData($countsh, $lv4count)
    EndFunc ;==>_count

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

    Func _reg()

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

    Local $icount = _GUICtrlListView_GetItemCount($hListViewon)
    For $i = 0 To $icount - 1
    $ListViewText = _GUICtrlListView_GetItemTextArray($hListViewon, $i)
    Local $line
    While 1
    If FileExists('\\server\share\' & $ListViewText[1] & '.log') Then
    $line = FileRead('\\server\share\' & $ListViewText[1] & '.log')
    If StringInStr($line, "Flag ") Then
    MsgBox(0, "", "String in Log vorhanden")
    Else
    MsgBox(0, "", "String in log nicht vorhanden")
    ExitLoop
    EndIf
    Else
    Ping($ListViewText[1], 1) ; Host anpingen
    If @error Then
    MsgBox(0, 0, "Ping auf " & $ListViewText[1] & " nicht erfolgreich!")
    ExitLoop
    Else
    RegRead("\\" & $ListViewText[1] & "\HKEY_LOCAL_MACHINE\SOFTWARE\x32\Flag", "ProductName")
    If @error = 0 Then
    MsgBox(0, "", "Flag eintrag x32 vorhanden")
    ExitLoop
    Else
    RegRead("\\" & $ListViewText[1] & "\HKEY_LOCAL_MACHINE\SOFTWARE\x64\\Flag", "ProductName")
    If @error = 0 Then
    MsgBox(0, "", "Flag eintrag x64 vorhanden")
    ExitLoop
    If @error Then ExitLoop
    EndIf
    EndIf
    EndIf
    EndIf
    WEnd

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

    _count()
    Next
    EndFunc ;==>_reg

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

    Func NewItems1()
    _GUICtrlListView_DeleteAllItems($hListView)
    _GUICtrlListView_DeleteAllItems($hListViewon)
    _GUICtrlListView_DeleteAllItems($hListViewflag)
    _GUICtrlListView_DeleteAllItems($hListViewSH)
    Local $array
    $string = FileRead('c068.txt')
    $array = StringRegExp($string, 'CN=(.+?),.*', 3)
    For $i = 0 To UBound($array) - 1
    GUICtrlCreateListViewItem($array[$i], $hListView)
    Next
    EndFunc ;==>NewItems1

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

    Func _pingall()

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

    _GUICtrlListView_DeleteAllItems($hListViewon)
    Local $icount = _GUICtrlListView_GetItemCount($hListView)
    For $i = 0 To $icount - 1

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

    $ListViewText = _GUICtrlListView_GetItemTextArray($hListView, $i)
    ConsoleWrite($ListViewText[1] & @CRLF)
    Ping($ListViewText[1], 1) ; Host anpingen
    If @error = 0 Then GUICtrlCreateListViewItem($ListViewText[1], $hListViewon)
    _count()
    Next
    _reg()
    EndFunc ;==>_pingall

    [/autoit]

    Brauche mal einen tipp??

    Gruß
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hey,
    die anzahl meiner items also in meinem fall 876
    eine idee?
    Gruß
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Dann "springt" die Funktion auch an. Nur das Ergebnis ist wohl anders als erwartet.
    Bau einfach in jeder Abzweigung eine msgbox (mit eindeutiger Bezeichnung) ein, somit lässt sich schnell herausfinden wo du in der Funktion gelandet bist.

  • Hey,
    ich habe ja schon überall eine MSGBOX aber leider ohne erfolg ich kriege keine einzige MSG
    habe das komische gefühl das while schleife garnicht anspringt ???
    Aber ist auch nur so ein gefühl?

    Gruß
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hey,

    ich sehe ja wenn er mit dem Ping durch ist .
    und dann hängt e!
    weiss aber nicht wo ???????

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hey,

    die regread pfade habe ich geprüft funktioniert :
    habe in jede zeile eine msg eingefügt er hängt bei :
    While 1
    msg
    aber wieso??

    Gruß
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hallo,
    in solchen Fällen hilft ein beherztes TRACE Add Tracelines in den Scite- Tools.
    Nach einem freundlichen F5 gibt dann 2 Möglichkeiten:
    1. Script hängt in einer endlosschleife fest, dann "abschiessen" und in den letzten Zeilen der Console nachschauen was los war
    2. Script hängt an einem Befehl (z.B. ping), dann steht die letzte ausgeführte Zeile auch in der Console
    ciao
    Andy

    • Offizieller Beitrag

    Versuch's mal mit dieser Version von _reg():

    Spoiler anzeigen
    [autoit]


    Func _reg()
    Local $icount = _GUICtrlListView_GetItemCount($hListViewon)
    For $i = 0 To $icount - 1
    $ListViewText = _GUICtrlListView_GetItemTextArray($hListViewon, $i)
    Local $line
    While 1
    If FileExists('\\server\share\' & $ListViewText[1] & '.log') Then
    $line = FileRead('\\server\share\' & $ListViewText[1] & '.log')
    If StringInStr($line, "Flag ") Then
    MsgBox(0, "", "String in Log vorhanden")
    Else
    MsgBox(0, "", "String in log nicht vorhanden")
    ExitLoop
    EndIf
    Else
    Ping($ListViewText[1], 1) ; Host anpingen
    If @error Then
    MsgBox(0, 0, "Ping auf " & $ListViewText[1] & " nicht erfolgreich!")
    ExitLoop
    Else
    RegRead("\\" & $ListViewText[1] & "\HKEY_LOCAL_MACHINE\SOFTWARE\x32\Flag", "ProductName")
    If @error = 0 Then
    MsgBox(0, "", "Flag eintrag x32 vorhanden")
    ExitLoop
    Else
    RegRead("\\" & $ListViewText[1] & "\HKEY_LOCAL_MACHINE\SOFTWARE\x64\\Flag", "ProductName")
    If @error = 0 Then
    MsgBox(0, "", "Flag eintrag x64 vorhanden")
    ExitLoop
    Else
    ExitLoop
    EndIf
    EndIf
    EndIf
    EndIf
    WEnd
    _count()
    Next
    EndFunc ;==>_reg

    [/autoit]