Kommt leider nicht in Frage, da ich die Werte für ein anderes Tool benötige und es für meine Firma (bisschen größer) nicht in Frage kommt.
Beiträge von traumhaeftling
-
-
Wenn du das aktuelle Datum haben willst:
[autoit]$datum = @MDAY & "." & @MON & "." & @YEAR
[/autoit]
[autoit]
Mit Auswahlfeld:Local $date
[/autoit][autoit][/autoit][autoit]GUICreate("Meine GUI ermittelt das Datum", 200, 200, 800, 200)
[/autoit][autoit][/autoit][autoit]
$date = GUICtrlCreateDate("", 10, 10, 185, 20, $DTS_SHORTDATEFORMAT)
GUISetState()Do
[/autoit]
$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE
[autoit]
Ausgeben kannst du das dann mit:GUICtrlRead($date)
[/autoit] -
Hallo Zusammen,
ich hoffe ihr habt eine Idee/Lösung.
Situtation:
Wir haben 14 Server, die 24/7 das ganze Jahr über laufen. (Außer beim Patchen)
Da auf diesen Servern mal mehr mal weniger gerechnet wird, wollen wir die Informationen im 2 min takt loggen.
Die Informationen wie CPU Usage, RAM Usage, CPU % Usage und angemeldete Sessions werden dann in eine Oracle Datenbank geschrieben (besser für spätere Auswertungen).Problem:
Das ganze hab ich auf 3 Servern gleichzeitig ausgeführt und funktioniert auch eine Zeitlang.
Irgendwann hängt es sich aber z.B. bei einem Server auf und es wird nichts mehr eingetragen.An was könnte es liegen? Wie könnte ich es ändern?
Allgemein: was würdet ihr am Quelltext verbessern?Hier zu sehen(Server 9 loggt plötzlich nicht mehr. Eine Stunde später Server 8 auch nicht mehr):
[Blockierte Grafik: http://i60.tinypic.com/2z5t6kj.jpg]Funktion des Tools:
Am Anfang wird erstmal festgestellt um welchen Server es sich handelt:Spoiler anzeigen
[autoit]Select
[/autoit]
Case @ComputerName = "compute02"
$server_ID = 1
Case @ComputerName = "compute03"
$server_ID = 2
Case @ComputerName = "compute04"
$server_ID = 3
Case @ComputerName = "compute05"
$server_ID = 4
Case @ComputerName = "compute06"
$server_ID = 5
Case @ComputerName = "compute07"
$server_ID = 6
Case @ComputerName = "compute08"
$server_ID = 7
Case @ComputerName = "compute09"
$server_ID = 8
Case @ComputerName = "compute10"
$server_ID = 9
Case @ComputerName = "compute11"
$server_ID = 10
Case @ComputerName = "compute12"
$server_ID = 11
Case @ComputerName = "compute13"
$server_ID = 12
Case @ComputerName = "compute14"
$server_ID = 13
Case @ComputerName = "COMPUTE20"
$server_ID = 14
EndSelect
Dann lass ich eine Schleife 2 Minuten lang die CPU Werte in Array schreiben um später nen Durchschnitts CPU Usage Wert ausrechnen zu können.
Dabei arbeite ich mit einem Timer, der die Schleife so lange durchlaufen lässt wie angegeben:Spoiler anzeigen
[autoit]$timestamp = TimerInit()
[/autoit] [autoit][/autoit] [autoit]While TimerDiff($timestamp) <= 120000
[/autoit]
Call("CPUusage")
Sleep(20)
WEnd
könnte es sein, dass sich beim abbrechen der Funktion sich das ganze schon aufhängt?Nach den 2 Minuten Timer werden dann die restlichen Funktionen nacheinander ausgeführt und in die Datenbank eingepflegt.
Eventuell liegt der Fehler auch beim Eintragen in die Datenbank.Hier der komplette Quelltext:
Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <File.au3>Global $array[10]
[/autoit] [autoit][/autoit] [autoit]
Global $meancounter = 0
Global $callcounter
Global $backWertcpu
Global $backWertram
Global $aGesamt
Global $aAnzahl
Global $server_ID
Dim $oMyErrorSelect
[/autoit] [autoit][/autoit] [autoit]
Case @ComputerName = "compute02"
$server_ID = 1
Case @ComputerName = "compute03"
$server_ID = 2
Case @ComputerName = "compute04"
$server_ID = 3
Case @ComputerName = "compute05"
$server_ID = 4
Case @ComputerName = "compute06"
$server_ID = 5
Case @ComputerName = "compute07"
$server_ID = 6
Case @ComputerName = "compute08"
$server_ID = 7
Case @ComputerName = "compute09"
$server_ID = 8
Case @ComputerName = "compute10"
$server_ID = 9
Case @ComputerName = "compute11"
$server_ID = 10
Case @ComputerName = "compute12"
$server_ID = 11
Case @ComputerName = "compute13"
$server_ID = 12
Case @ComputerName = "compute14"
$server_ID = 13
Case @ComputerName = "COMPUTE20"
$server_ID = 14
EndSelectWhile 1 ;Server muss immer darauf warten, deshalb endlosschleife.
[/autoit] [autoit][/autoit] [autoit]$timestamp = TimerInit()
[/autoit] [autoit][/autoit] [autoit]While TimerDiff($timestamp) <= 120000
[/autoit] [autoit][/autoit] [autoit]
Call("CPUusage")
Sleep(20)
WEnd_RAM() ;RAM auslesen
[/autoit] [autoit][/autoit] [autoit]
_CPU() ;CPU berechnung starten und Werte versenden
sessions()$ado = ObjCreate("ADODB.Connection")
[/autoit] [autoit][/autoit] [autoit]With $ado
[/autoit] [autoit][/autoit] [autoit]
.ConnectionString = ("Provider='OraOLEDB.Oracle';Data Source='xxxxx';User Id='xxxx';Password='xxxxx';")
.Open
EndWith$adors = ObjCreate("ADODB.RecordSet")
[/autoit] [autoit][/autoit] [autoit]With $adors
[/autoit] [autoit][/autoit] [autoit]
.ActiveConnection = $ado
.Source = "INSERT INTO LOGS(DATUM, UHRZEIT, RAM_PROZENT, RAM_GB, CPU, USER_SESSIONS, SERVER_ID) VALUES('" & @YEAR & "." & @MON & "." & @MDAY & "','" & @HOUR & ":" & @MIN & ":" & @SEC & "'," & $aGesamt & "," & $backWertram & "," & $backWertcpu & "," & $aAnzahl & "," & $server_ID&")"
.open
EndWith$adors.close
[/autoit] [autoit][/autoit] [autoit]
$ado.closeWEnd
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]; #FUNCTION# ====================================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name ..........: _RAM
; Description ...: liest die RAM Usage aus, rechnet die RAM Usage in Prozent und versendent die Werte per TCP zurück an den Absender
; Syntax ........: _RAM()
; Return values .: None
; Author ........: Marcel Dias Andrade
; ===============================================================================================================================
Func _RAM() ;RAM auslesung
Local $aMem = MemGetStats()Local $aMemTot = $aMem[1] - $aMem[2] ;$aMem[1] = Gesamter physikalischer RAM, $aMem[2] = Verfügbarer physikalischer RAM, $aMemTot = RAM Usage
[/autoit] [autoit][/autoit] [autoit]$aGesamt = Round(($aMemTot / $aMem[1] * 100)) ;Prozentwert berechnung
[/autoit] [autoit][/autoit] [autoit]$backWertram = Round(($aMemTot / 1024) / 1024, 3) ;ausgabe der Ram werte
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_RAM
[/autoit] [autoit][/autoit] [autoit]; #FUNCTION# ====================================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name ..........: _CPU
; Description ...: Rechnet aus den 10 CPU Auslastungs Werten den durchschnitt und versendent es per TCP zurück an den Absender
; Syntax ........: _CPU()
; Return values .: None
; Author ........: Marcel Dias Andrade
; ===============================================================================================================================
Func _CPU()$count = 0
[/autoit] [autoit][/autoit] [autoit];Rechnet alle 10 CPU Usage Werte zusammen für die Durchschnittsrechnung
[/autoit] [autoit][/autoit] [autoit]
For $ia = 0 To 9
$backWertcpu = $backWertcpu + $array[$count]
$count = $count + 1
Next$backWertcpu = $backWertcpu / 10 ;Durchschnitt Brechnung
[/autoit] [autoit][/autoit] [autoit]$backWertcpu = Round($backWertcpu)
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_CPU
[/autoit] [autoit][/autoit] [autoit]; #FUNCTION# ====================================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name ..........: CPUusage
; Description ...: Liest die CPU Werte in ein Array ein
; Syntax ........: CPUusage()
; Return values .: None
; Author ........: Marcel Dias Andrade
; ===============================================================================================================================
Func CPUusage()$wbemFlagReturnImmediately = 0x10
[/autoit] [autoit][/autoit] [autoit]
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$objWMIService = ObjGet("winmgmts:" & $strComputer & "\root\CIMV2")If $meancounter < 10 Then
[/autoit] [autoit][/autoit] [autoit]$colItems = $objWMIService.ExecQuery("SELECT LoadPercentage FROM Win32_Processor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
[/autoit] [autoit][/autoit] [autoit]
If IsObj($colItems) Then
For $objItem In $colItems
$array[$meancounter] = $objItem.LoadPercentage
Next
EndIf$meancounter = $meancounter + 1
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]
$meancounter = 0
EndIfEndFunc ;==>CPUusage
[/autoit] [autoit][/autoit] [autoit]; #FUNCTION# ====================================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name ..........: sessions
; Description ...: liest aus, wie viele User angemeldet sind
; Syntax ........: sessions()
; Return values .: None
; Author ........: Marcel Dias Andrade (PEA3-Fe)
; Modified ......: 04.07.2014
; ===============================================================================================================================
Func sessions()
Global $PID, $Ret = ""
$PID = Run('"' & @ComSpec & '" /c quser', '', @SW_HIDE, 0x2)While 1
[/autoit] [autoit][/autoit] [autoit]
$Ret &= StdoutRead($PID)
If @error Then ExitLoop
WEnd$aAnzahl = StringSplit($Ret, @CRLF, 1) ;$aAnzahl[0]-2 = anzahl der angemeldeten User
[/autoit] [autoit][/autoit] [autoit]
$aAnzahl = $aAnzahl[0] - 2EndFunc ;==>sessions
[/autoit] -
Danke für die Tipps

-
Eventuell hilft dir das: [ offen ] Listview - Scrollen ohne Scrollbalken
-
Habs jetzt einfach mal ausprobiert. Wenn ich es richtig verstanden habe soll es genau so sein:
[autoit]#include <IE.au3>
[/autoit][autoit][/autoit][autoit]
$oIE = _IECreate("http://meineseite.de")
While 1_IENavigate($oIE,"http://google.de")
[/autoit][autoit][/autoit][autoit]Sleep(300000)
[/autoit]
WEnd
Keine Ahnung was dein "javascript:javascript:link()" navigieren soll...funktioniert auch nicht. Mit Google wie in meinem Beispiel aber schon. -
So sollte es doch klappen?
[autoit]
Endlosschleife, die jedesmal 5 Minuten sleept und dann wieder einmal durchläuft?#include <IE.au3>
[/autoit][autoit][/autoit][autoit]While 1
[/autoit][autoit][/autoit][autoit]
$oIE = _IECreate("http://meineseite.de")
_IENavigate($oIE,"javascript:javascript:link()")Sleep(300000)
[/autoit]
WEnd/Edit/ Zusatz: Verstehe auch nicht ganz was dein code da machen soll? Wieso willst du, dass deine Seite sich öffnet und nach 5 minuten wieder neu geöffnet wird?
-
Hab gedacht ich poste hier mal eine Funktion für das auslesen von der RAM Auslastung(in GB und Prozent):
Spoiler anzeigen
[autoit]_RAM()
[/autoit] [autoit][/autoit] [autoit]; #FUNCTION# ====================================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name ..........: _RAM
; Description ...: liest die RAM Auslastung aus + rechnet die RAM Usage in Prozent
; Syntax ........: _RAM()
; ===============================================================================================================================
Func _RAM()
Local $aMem = MemGetStats()Local $aMemTot = $aMem[1] - $aMem[2] ;$aMem[1] = Gesamter physikalischer RAM, $aMem[2] = Verfügbarer physikalischer RAM, $aMemTot = RAM Usage
[/autoit] [autoit][/autoit] [autoit]Local $aGesamt = Round($aMemTot / $aMem[1] * 100) ;Prozentwert berechnung
[/autoit] [autoit][/autoit] [autoit]$backWert = Round(($aMemTot / 1024) / 1024, 3) ;ausgabe der Ram werte
[/autoit] [autoit][/autoit] [autoit]MsgBox("RAM", "RAM Usage", "RAM Auslastung in GB : " & $backWert & @CRLF & @CRLF & "RAM Auslastung in % : " & $aGesamt & "%")
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_RAM
[/autoit] -
Von mir auch ein Herzliches Willkommen

hast du schon Ideen was du so mit Autoit machen willst?
-
Guten Morgen,
soweit ich weiß ist es so, dass du jedes mal die ID, Name, etc. im Quelltext suchen musst. Je nach dem was du brauchst bzw. welche Funktion du anwendest.
Z.b. brauchst du bei _FFClick zum Ansprechen eines dieser Infos aus dem Quelltext:Spoiler anzeigen
- elements = (Default) clickt auf das angegebene Element
- id = mit der ID $sElement
- name = mit dem Namen $sElement und dem Index $iIndex
- class = mit der Klasse $sElement und dem Index $iIndex
- tag = mit dem Tag $sElement und dem Index $iIndex
Hier findest du die Funktionsreferenzen für FF.au3 (ich geh mal davon aus, dass du es mit Firefox machen willst): http://german.documentation.ff-au3.thorsten-willert.de/
-
Gefällt mir sehr gut, aber ich bin glaub ich einfach zu schlecht. Nice work!
-
Mein Programm läuft jetzt wunderbar. Danke nochmal an euch!

Das einzig blöde daran ist, dass die Exe auf dem Server ja ständig laufen muss --> heißt es muss vom System ausgeführt werden und nicht direkt vom User. Da bin ich gerade dran. Hat da jemand eine Idee wie man das schnell und einfach hinbekommt? (Eventuell kann ich ja auch ein neues Thema eröffnen, wobei es ja nicht nur Autoit betrifft)
Dieses Problem hab ich mittlerweile auch schon gelöst und funktioniert wunderbar (für die, die es interessiert)Hab dafür folgende Tutorials benutzt:
-
Sehr sehr sehr nice, danke fürs teilen!
-
Hey,
hier die Lösung:
Spoiler anzeigen
[autoit]#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.10.2
[/autoit] [autoit][/autoit] [autoit]
Author: myNameScript Function:
[/autoit] [autoit][/autoit] [autoit]
Template AutoIt script.#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]; Script Start - Add your code below here
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]; ergebnisse zum kopieren bereitstellen
[/autoit] [autoit][/autoit] [autoit]
#include <Excel.au3>
#include <MsgBoxConstants.au3>Local $sFilePath1 = @ScriptDir & "\rohdaten.xlsx" ;This file should already exist
[/autoit] [autoit][/autoit] [autoit]
Local $oExcel = _ExcelBookOpen($sFilePath1)If @error = 1 Then
[/autoit] [autoit][/autoit] [autoit]
MsgBox($MB_SYSTEMMODAL, "Error!", "Unable to Create the Excel Object")
Exit
ElseIf @error = 2 Then
MsgBox($MB_SYSTEMMODAL, "Error!", "File does not exist - Shame on you!")
Exit
EndIf_ExcelSheetActivate($oExcel, "rohdaten") ; Richtigen Reiter aktivieren
[/autoit] [autoit][/autoit] [autoit];Von Ergebnisse Daten von Excel auslesen Beginnen bei Zeile 8, Spalte A, Zelle 1
[/autoit] [autoit][/autoit] [autoit]Global $aArray = _ExcelReadArray($oExcel, 8, 1, 9, 1)
[/autoit] [autoit][/autoit] [autoit];Daten jetzt übertragen
[/autoit] [autoit][/autoit] [autoit]
Local $sFilePath2 = @ScriptDir & "\ergebnis.xlsx" ;This file should already exist
Local $oExcel = _ExcelBookOpen($sFilePath2)If @error = 1 Then
[/autoit] [autoit][/autoit] [autoit]
MsgBox($MB_SYSTEMMODAL, "Error!", "Unable to Create the Excel Object")
Exit
ElseIf @error = 2 Then
MsgBox($MB_SYSTEMMODAL, "Error!", "File does not exist - Shame on you!")
Exit
EndIf_ExcelSheetActivate($oExcel, "ergebnis") ; Richtigen Reiter aktivieren
[/autoit]
_ExcelWriteArray( $oExcel, 1, 2, $aArray, 1) ; Ergebnisse neben Zelle B1 usw. eintragen
Du hast die Daten Falsch eingelesen. Nämlich musst du nicht mit einer Forschleife jede Zeile durchgehen, weil das übernimmt schon die Funktion --> _ExcelReadArray
schau dir einfach mal die Beispiele und die Funktion genauer an: _ExcelReadArray & _ExcelWriteArray -
Das was du suchst ist: Permutationohne Wiederholung.
Also ich würde erstmal das Wort (wenn es dynamisch über eine Inputbox eingelesen werden soll z.B) in einzelne Chars splitten und diese in ein Array schreiben. Dann mittels Rekursion alle Kombinationen herausfinden. (Findest du auch genug im Internet)
Was du aber wissen musst ist, dass es bei größeren Wörtern schnell mal zu enorm großen Werten kommt einfaches Beispiel(Wenn ich mich nicht vertue):
Bei einer länge von 10 Buchstaben: 10! / (10 - 10)! = 3,628,800
da rechnet dein Rechner ne Weile. -
Hallo,
suchst du noch jemanden?
-
Hello,
You will tweet without the mainpage, right? Can you post your complete code? so I can fix the problem.
-
Hallo zusammen,
hab mir das ganze angeschaut und aus verschiedenen code schnippseln im Internet es hinbekommen. Sehr genial.
Ich hab es mit TPC gemacht und das funktioniert wunderbar! Auch von der Performance (Immerhin werden 14 Server in einer Schleife abgefragt)Im Anhang noch ein Bild wie die Ausgabe dann aussieht. (Kann man hier keine Bilder ohne URL einfügen?)
Das einzig blöde daran ist, dass die Exe auf dem Server ja ständig laufen muss --> heißt es muss vom System ausgeführt werden und nicht direkt vom User. Da bin ich gerade dran. Hat da jemand eine Idee wie man das schnell und einfach hinbekommt? (Eventuell kann ich ja auch ein neues Thema eröffnen, wobei es ja nicht nur Autoit betrifft)
Vielen dank euch!!
-
Hallo,
du hast schlicht und weg etwas vergessen. Nämlich musst du in der Funktion auch den Label aktualisieren:
Außerdem würde ich die Variablen für die Akku Funktion oben nur deklarieren.
Beim Start der GUI soll er direkt die Funktion aufrufen. So hast du es nicht doppelt
Einfach vor der While:
Hoffe es funktioniert, arbeite gerade nur am Rechner und kann es nicht prüfen. -
Danke schonmal für die Antwort!
Genau richtig. Komplett alles ist im gleichen Netz sowohl die Rechner der User wie auch die Server.Also es sind 6 Server (Windows Server). Diese sind alle in der GUI angezeigt, damit alle User die Zugriff haben sich da einloggen können. Heißt, es greifen mehrere Clients auf die Server. Die Gui muss also, wenn sie mehrmals gleichzeitig geöffnet ist (eher selten handelt sich um 20 User) dann bei jedem User die CPU Auslastung anzeigen

Schau mit das mit TCP gleich mal an.