StdoutRead Problem

  • Hey,

    ich habe zur zeit das Problem das ich eine grosse anzahl an rechner Pingen muss ob sie online sind.
    Leider dauert das mit dem Standart ping so lange

    daher habe ich mich für alive.exe entschieden und siehe da ein neues Problem ;)

    ich rufe es so auf:

    [autoit]

    Run(@ComSpec & " /c " & 'Alive.exe /repeat=1 /timeout=0 hostname', "", @SW_HIDE, 4)

    [/autoit]

    und in der Console kommt folgendes.

    Sending 1 echo requests to Hostname

    28.07.2009 07:50:38 | Hostname.my.dns.com (192.168.0.3) is alive.

    Jetzt wollte ich den StdoutRead auswerten immer wenn "is alive" erscheint z.b MSGBOX auslössen aber leider hänge ich seid gestern daran jemand einen tipp für mich ??

    Gruß
    SubZero

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

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

  • Hi,

    warum nicht:


    [autoit]

    $var = Ping("xxx.xxx.xxx.xxx",0)
    If $var Then; also possible: If @error = 0 Then ...
    Msgbox(0,"Status","Online, roundtrip was:" & $var)
    Else
    Msgbox(0,"Status","An error occured with number: " & @error)
    EndIf

    [/autoit]


    oder


    [autoit]

    #include <Constants.au3>

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

    Local $foo = Run(@ComSpec & " /c ping http://www.google.de -n 1", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    Local $line

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

    While 1
    $line = StdoutRead($foo)
    If StringInStr ($line, "Antwort von") Then
    MsgBox (0,"","Server da....")
    Else
    If StringInStr ($line, "konnte Host") or StringInStr ($line, "der Anforderung") Then
    MsgBox (0,"","Fehler....")
    ExitLoop
    EndIf
    EndIf
    If @error Then ExitLoop
    Wend

    [/autoit]


    ;-))

    Stefan

  • Hey,
    ich will das ja aus performance gründen mit alive.exe machen.

    habe folgendes und leider funktioniert es nicht hatte das selbe beispiel aus der hilfe ;)

    [autoit]

    $line = StdoutRead($foo)
    If StringInStr ($line, "is alive.") Then
    MsgBox (0,"","Server da....")
    endif

    [/autoit]

    und so sieht die sonsole aus:

    [autoit]

    Sending 1 echo requests to server

    29.07.2009 09:54:30 | server.mydns.com (xx.xx.xx.xx) is alive.

    [/autoit]

    wichtig ist ich will ja nur die online sind also reicht mir wenn ich alive abfragen kann aber:

    Ich weiss zwar nicht wie aber wenn ich könnte wäre schon nicht schlecht wenn ich auch folgende werte abfragen könnte.

    Request timed out
    Destination host unreachable
    Destination network unreachable
    Destination protocol unreachable
    Destination port unreachable
    Hardware error
    TTL expired in transit
    Bad Destination
    Other errors


    Gruß
    SubZero

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

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

  • solche Werte bringen dir im Ernstfall nicht viel - soll heissen - du denkst, dass der Server online ist - allerdings ist alles was noch antwortet die NW-Karte und der Server hängt z.B. im Bluescreen oder die SERVERDIENSTE, die benötigt werden laufen nicht etc.

    8|

    Zitat

    Laughing Man

    "I thought, what I'd do was, I'd pretend I was one of those deaf-mutes"

  • mhhh,

    hast recht mir würde ja reichen wenn ich das abfrage.

    Sending 1 echo requests to server

    29.07.2009 09:54:30 | server.mydns.com (xx.xx.xx.xx) is alive.

    und alles was nicht "is alive" enthält wäre offline.

    Eine idee?

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

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

  • Hi,

    [autoit]

    #include <Constants.au3>
    Local $foo = Run(@ComSpec & " /c c:\alive.exe /repeat=1 /timeout=0 http://www.google.de", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    Local $line
    $balive = False
    While 1
    $line = StdoutRead($foo)
    If StringInStr ($line, "is alive") Then
    MsgBox (0,"","Server da....")
    $balive = True
    ExitLoop
    EndIf
    If @error Then ExitLoop
    Wend
    If Not $balive Then MsgBox (0,"","Fehler aufgetaucht")
    Exit

    [/autoit]


    ;-))

    Stefan

  • Hi,

    die alive.exe hab ich mir schon runtergeladen:

    Local $foo = Run(@ComSpec & " /c c:\alive.exe (Den Pfad hast Du angepasst?)


    Wenn ja.... Bei mir funktioniert das ohne Probleme: WinXP SP3 AutoIT 3.3.0.0

    ;-))

    Stefan

  • Hey,

    so jetzt funktioniert es bei mir auch aber,

    funktioniert nur wenn es " is alive" sobald ein anderer status da ist geht es nicht
    z.b.
    Sending 1 echo requests to SERVERX

    29.07.2009 11:02:48 | SERVERX TIMED OUT

    Eine Idee?

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

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

  • Ok ich habe verstanden selber essen macht dick ;)

    [autoit]

    #include <Constants.au3>
    Local $foo = Run(@ComSpec & " /c " & "C:\tools\alive\alive.exe /repeat=1 /timeout=0 serverxxxx", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    Local $line
    ;


    If StringInStr ($line, "is alive") Then
    MsgBox(0, "", "Server da...")
    Else
    MsgBox(0, "", "Fehler")
    EndIf

    [/autoit]

    Aber irgendwie ist der Wurm drin müsste doch so gehen oder?

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

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

  • Steilvorlage:


    [autoit]

    While 1
    $line = StdoutRead($foo)
    If StringInStr ($line, "is alive") Then
    MsgBox (0,"","Server da....")
    ExitLoop
    ElseIf StringInStr ($line, "TIMED OUT") Then
    MsgBox (0,"","Server Time Out.....")
    ExitLoop
    ElseIf StringInStr ($line, "host unreachable") Then
    MsgBox (0,"", "Server nicht erreichbar.....")
    ExitLoop
    ElseIf StringInStr ($line, "Bad Destination") Then
    MsgBox (0,"", "Server Bad Destination....")
    ExitLoop
    EndIf
    If @error Then ExitLoop
    Wend

    [/autoit]


    Den Rest solltest Du jetzt selber hinbekommen....

    8o

  • Toorrrrrrrrrrrrrrrr!!!!!!!!!!!!!!!!!!!! ;)


    [autoit]

    #include <Constants.au3>
    Local $foo = Run(@ComSpec & " /c " & "alive.exe /repeat=1 /timeout=0 server", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    Local $line
    ;
    While 1
    $line = StdoutRead($foo)
    If StringInStr ($line, "is alive") Then
    MsgBox (0,"","Server da....")
    ExitLoop
    ElseIf StringInStr ($line, "TIMED OUT") Then
    MsgBox (0,"","Server Time Out.....")
    ExitLoop
    ElseIf StringInStr ($line, "host unreachable") Then
    MsgBox (0,"", "Server nicht erreichbar.....")
    ExitLoop
    ElseIf StringInStr ($line, "Bad Destination") Then
    MsgBox (0,"", "Server Bad Destination....")
    ExitLoop
    ElseIf StringInStr ($line, "network unreachable") Then
    MsgBox (0,"", "network unreachable....")
    ExitLoop
    ElseIf StringInStr ($line, "protocol unreachable") Then
    MsgBox (0,"", "protocol unreachable....")
    ExitLoop
    ElseIf StringInStr ($line, "port unreachable") Then
    MsgBox (0,"", "port unreachable....")
    ExitLoop
    ElseIf StringInStr ($line, "expired") Then
    MsgBox (0,"", " expired ....")
    ExitLoop
    ElseIf StringInStr ($line, "Hardware error") Then
    MsgBox (0,"", " Hardware error ....")
    ExitLoop
    ElseIf StringInStr ($line, "Other errors") Then
    MsgBox (0,"", "Other errors ....")
    ExitLoop
    EndIf
    If @error Then ExitLoop
    Wend

    [/autoit]

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

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