Probleme mit Befehl "If @error Then ExitLoop"

  • Hallo,

    mit dem Befehls "Run(@ComSpec & " /c net user", "", @SW_HIDE, $StdOut_CHILD)" ermittelt das beigefügten Script Informationen zu registrierten Benutzer auf dem lokalen Betriebsystem.

    Mein Problem, um das richtige Ergebnis zu erhalten, muss ich im beigefügten Script nach dem Befehl "If @error Then ExitLoop" immer den Befehl "MsgBox(0, "Error Status of StdoutRead", @error)" ausführen. Kommentiert man den Befehl "MsgBox(0, "Error Status of StdoutRead", @error)" aus oder löscht man ihn, ist das erwartete Ergebnis falsch. Hat irgend jemand eine Idee, was die Ursache dafür ist?

    fristo

  • das erste ist schon mal der satz aus der hilfe hier:

    Code
    StdOutRead
    Fehler: Setzt @error ungleich Null wenn EOF erreicht ist, STDOUT wurde an diesen Prozess nicht weitergeleitet oder anderer Fehler.

    ich sitz grad am problem^^

    Padmak
    Edit: Die erste func haut schonmal:

    Spoiler anzeigen
    [autoit]


    Func GetUserList()

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

    Local $textStdout
    Local $userList

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

    $pid = _CMDRead("net user")
    $userList = StringSplit($pid, @CRLF, 1)
    $userList = StringSplit(StringStripWS(_ArrayToString($userList, "", 5, $userList[0] - 3), 1 + 2 + 4), " ", 1)

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

    Return ($userList)

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

    EndFunc ;==>GetUserList

    [/autoit]

    Allerdings brauchst du dazu meine _CMDRead (ich wusste dass die mal nützlich ist :D)

    Spoiler anzeigen
    [autoit]


    Func _CMDRead($Command)
    Local $CMDRead

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

    $CMD = Run(@ComSpec & " /c " & $Command, @ScriptDir, @SW_HIDE, $StdOut_CHILD)

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

    While 1
    $CMDRead &= StdoutRead($CMD)
    If @error Then ExitLoop
    WEnd
    Return $CMDRead
    EndFunc ;==>_CMDRead

    [/autoit]
    • Offizieller Beitrag

    Probier mal aus, ob es so funktioniert wie du es brauchst.

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    AutoIt Version: 3.3.0.0
    Author: FriSto

    Script Function:
    Template AutoIt script.


    #ce ----------------------------------------------------------------------------

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

    #include <Constants.au3>
    #include <File.au3>
    #include <Array.au3>

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

    ;------------------------------------------------------------------------------

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

    Local $myUserList
    Local $user

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

    $myUserList = GetUserList()
    _ArrayDisplay($myUserList, "Result of GetUserList")

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

    $user = @UserName

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

    MsgBox(0, "Result of GetUserDescription (" & $user & ")", GetUserDescription($user))
    MsgBox(0, "Result of GetUserFullName (" & $user & ")", GetUserFullName($user))

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

    Exit

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

    ;------------------------------------------------------------------------------

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

    Func GetUserList()

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

    Local $textStdout
    Local $userList

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

    Local $pid = Run(@ComSpec & " /c net user", "", @SW_HIDE, $StdOut_CHILD)

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

    While 1
    $textStdout &= StdoutRead($pid)
    If @error Then ExitLoop
    WEnd
    $userList = StringSplit($textStdout, @CRLF, 1)
    $userList = StringSplit(StringStripWS(_ArrayToString($userList, "", 5, $userList[0] - 3), 1 + 2 + 4), " ", 1)
    Return ($userList)

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

    EndFunc ;==>GetUserList

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

    ;------------------------------------------------------------------------------

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

    Func GetUserDescription($user)

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

    Return (GetDescriptionList($user, 3))
    EndFunc ;==>GetUserDescription

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

    ;------------------------------------------------------------------------------

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

    Func GetUserFullName($user)

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

    Return (GetDescriptionList($user, 2))
    EndFunc ;==>GetUserFullName

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

    ;------------------------------------------------------------------------------

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

    Func GetDescriptionList($user, $index)

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

    Local $textStdout
    Local $descriptionList
    Local $field

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

    Local $pid = Run(@ComSpec & " /c net user " & $user, "", @SW_HIDE, $StdOut_CHILD)

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

    While 1
    $textStdout &= StdoutRead($pid)
    If @error Then ExitLoop
    WEnd
    $descriptionList = StringSplit($textStdout, @CRLF, 1)

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

    _ArrayDisplay($descriptionList, "Info Description List")

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

    Return (StringStripWS(StringTrimLeft($descriptionList[$index], StringInStr($descriptionList[$index], " ")), 1 + 2 + 4))
    EndFunc ;==>GetDescriptionList

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

    ;------------------------------------------------------------------------------

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