Geschwindigkeitstest mit AutoIT

  • Guten Morgen zusammen,

    seit kurzem beschäftige ich mich mit AutoIT, da wir in der Firma einen Weg finden wollen die Geschwindigkeit eines Terminalserver zu ermitteln.
    Bin dann auf AutoIT gestoßen.

    Wir haben im Betrieb 13 Terminalserver, und manchmal kommt es vor das sich ein Anwender über die Anmeldegeschwindigkeit etc. beschwert.
    Ich wollte nun einen Script schreiben, der ca. jede Stunde 1-2-mal durchgeführt wird, einen Anwender simuliert. Also sich anmelden, Outlook startet, eine Mail schreibt, Outlook schließt und sich anschließend vom Terminalserver abmeldet.

    Diese Zeit soll gemessen werden und wenn diese z.B. eine gewisse Zeit überschreitet, soll an unser Nagios eine Meldung gesendet werden.

    Zuerst dachte ich, dass dies einfach zu schreiben ist... run(Outlook.exe) blablabla und so weiter.

    Schnell musste ich aber feststellen, dass man an einen Remote Desktop Fenster keine befehle senden kann (habe dazu auch hier ein Thread aufgemacht).

    Anschließend habe ich mir gedachte, mit kleinen Denkanstoß hier aus dem Forum, dass ich eine mstsx.exe ein Programm mit als Startparameter gebe. Also ich melde mich auf einen der 13 Terminalserver an und es wird direkt ein Script ausgeführt.

    Dieser sieht so aus:

    [autoit]


    $mail = "mailadresse@mail.de"

    run("C:\Programme\Microsoft Office\OFFICE11\OUTLOOK.EXE")
    WinWaitActive("Posteingang - Microsoft Outlook")
    send("^n") ; Öffnet Neue Nachricht
    WinWaitActive("Unbenannt - Nachricht (Rich-Text)")
    send($mail) ; fügt Mailadresse ein
    send("{tab}") ; springt ins CC Feld
    send("{tab}") ; spring ins Betreff-Feld
    send("Test") ; füllt das Betreff Feld
    send("{tab}") ; spring ins Text-feld
    send("blablablablablablablablablabla") ; füllt das Textfeld
    send("!s") ; sendet die Mail
    WinWaitClose("Test - Nachricht (Rich-Text)")
    send("!{F4}") ; schließt Outlook
    WinWaitClose("Posteingang - Microsoft Outlook")
    send("{LWIN}") ; öffnet Startleiste
    sleep(500) ; hier muss ich kurz warten, da er sich schonst "verschluckt"
    send("m") ; meldet sich ab
    WinWaitActive("Windows-Abmeldung")
    send("a")

    [/autoit]

    Wie gesagt bin noch ein totaler Anfänger.

    Wenn ich den Script so ausführe klappt er wunderbar.
    Wenn ich ihn aber der mstsc.exe als Parameter mitgebe, also er dieser nach der Anmeldung sofort startet, dann kommt es zu ein paar Problemen:

    Es wird nur Outlook gestartet, kein Desktop -> verfälscht ja die Zeit, die gebraucht wird, wenn nicht alles geladen wird.
    Die Startleiste wird nicht geladen -> Der Abmelde-Teil funktioniert also nicht, da ich mich über die Win-Taste abmelde.
    mit STRG+ALT+ENTF geht es auch nicht, da es unsere Richtlinie nicht zulässt.

    Im Nachhinein ist das wohl auch nicht das Wahre, weil muss ja irgendwie die Zeit messen. Das weiß ich aber auch noch nicht wie ich das anstellen soll.

    Nächste Idee war:

    eine VM nehmen, dort lokal ein Script starten( und eine Art Stoppuhr startet), der eine Verbindung zum Terminalserver startet, wartet bis er komplett angemeldet ist, und anschließend per Mouseclick den Script starten.
    Da kann ich ja mit Koordinaten arbeiten, da diese sich ja nicht irgendwie durch die Bildschirmauflösung ändert.
    Dann kommt wieder der Script von oben in Einsatz. Der Funktioniert ja nun, da ich ja die Windowsleiste etc. habe.
    Der Script auf der VM wartet einfach mit dem WinWaitClose, auf das Schließen des Remote-Fensters und stoppt anschließend die Stoppuhr.
    Sendet dann diesen Zeitwert an Nagios, und wenn er >X ist, meckert er rum.


    Ist das nun so realisierbar :D ?

    Die Fragen, die ich mir stelle sind:
    Wie Starte ich eine Zeitmessung?
    Wie sage ich dem lokalen Script, dass er erst im Terminalserver rumklickt, wenn dieser komplett fertig geladen ist.
    Mit Sleep kann ich ja dort nicht arbeiten, verfälscht auch wieder die Zeitmessung.
    Da dachte ich an einer PixelAbfrage :D , also ändert sich die Frage z.B. oben links, weil da das Arbeitsplatz Icon kommt, ist alles Fertig geladen und es kann losgehen.

    Habt ihr Ideen? - Verbesserungsvorschläge - Oder geht’s vielleicht sogar einfacher??

    Liebe Grüße
    Eric

    Einmal editiert, zuletzt von EricM (29. November 2011 um 12:05)

  • Wann alles fertig geladen ist kann ich leider nicht sagen, ich denke mal ich würde mit den Prozessen rumspielen, mir den raussuchen, der beim Start den meisten Speicher braucht und dann starten, wenn der unter einem gewissen wert ist.

    Einen Timer startest kannst du hiermit einsetzen.

    [autoit]

    $Timer = TimerInit()
    $Diff = Timerdiff($Timer)

    [/autoit]