[Blockierte Grafik: http://img4.fotos-hochladen.net/thumbnail/pinglistknhgpsb258_thumb.jpg]
Hallo,
das Programm hab ich mal für einen Kollegen geschrieben der testen wollte ob alle Server durchlaufen oder sich zwischendurch neustarten
Funktionsweise:
Spoiler anzeigen
Das Programm pingt eine Liste von IP's und versendet, wenn sich ein Status ändert eine E-Mail.
Man kann im Programm die IP's mit Beschreibung usw. eintragen.
Die E-Mail Adresse wird bis aufs Passwort in eine ini geschrieben, damit man beim nächsten Start nicht wieder alles eingeben muss.
Jeder Eintrag in der Liste bekommt einen eigenen Prozess.
Schreibt Statusänderungen in ein Textdokument.
Pinglist Code:
Spoiler anzeigen
#cs --------------------------------------------------------------------------------------------------------
Name: PingList
Description: Ping a list of Computers, write protocols, send e-mails if a Computer change his mode
[/autoit] [autoit][/autoit] [autoit]Author: I3asti
#ce --------------------------------------------------------------------------------------------------------
#include <GUIConstants.au3>
#include <date.au3>
#include <GuiListView.au3>
#include <file.au3>
#include <mail.au3>
#include <EditConstants.au3>
#include <StructureConstants.au3>
#include <Clipboard.au3>
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]Dim $IP_Adresse, $Timeout, $Kunde, $Beschreibung, $Intervall, $k, $File, $t, $Server, $Benutzername, $Passwort, $EMail, $Smtp, $Port, $SSL, $string, $stringsplit
$ProgrammStatus = 0
$Stop = 0
Global $Adressen_Array[10000]
$Adressen = @ScriptDir & "\pingliste.txt"
$Ende = @ScriptDir & "\Ende.txt"
$ESave = @ScriptDir & "\EMail.ini"
$FirstRun = 1
$Status_End1 = "Online"
$Status_End2 = "Offline"
$z = 0
$Laufzeit = 0
#region GUI
$Ping = GUICreate("Ping", 961, 550, 193, 125)
$Listview2 = GUICtrlCreateListView("Kunde|Beschreibung|IP-Adresse|Timeout|Ergebnis|letzter Ping", 8, 8, 946, 115)
GUICtrlSendMsg(-1, 0x101E, 0, 175)
GUICtrlSendMsg(-1, 0x101E, 1, 175)
GUICtrlSendMsg(-1, 0x101E, 2, 166)
GUICtrlSendMsg(-1, 0x101E, 3, 115)
GUICtrlSendMsg(-1, 0x101E, 4, 155)
GUICtrlSendMsg(-1, 0x101E, 5, 155)
$Listview = GUICtrlCreateListView("Kunde|Beschreibung|IP-Adresse|Timeout|Ergebnis|letzter Ping", 8, 128, 609, 377)
GUICtrlSendMsg(-1, 0x101E, 0, 85)
GUICtrlSendMsg(-1, 0x101E, 1, 125)
GUICtrlSendMsg(-1, 0x101E, 2, 120)
GUICtrlSendMsg(-1, 0x101E, 3, 65)
GUICtrlSendMsg(-1, 0x101E, 4, 85)
GUICtrlSendMsg(-1, 0x101E, 5, 125)
$Kunde_Label = GUICtrlCreateLabel("Kunde", 632, 128, 50, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Kunde_Input = GUICtrlCreateInput($Kunde, 688, 128, 265, 21)
$Beschreibung_Label = GUICtrlCreateLabel("Beschreibung", 632, 160, 102, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Beschreibung_Input = GUICtrlCreateInput($Beschreibung, 736, 160, 217, 21)
$IP_Label = GUICtrlCreateLabel("IP", 632, 192, 19, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$IP_Input = GUICtrlCreateInput($IP_Adresse, 656, 192, 297, 21)
$Timeout_Label = GUICtrlCreateLabel("Timeout", 632, 224, 61, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Timeout_Input = GUICtrlCreateInput($Timeout, 696, 224, 257, 21)
$Insert = GUICtrlCreateButton("Hinzufügen", 880, 256, 75, 25, 0)
$Modus_Label = GUICtrlCreateLabel("Modus", 632, 264, 52, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Dauerping_Radio = GUICtrlCreateRadio("Dauerping (Jede Sekunde)", 632, 288, 250, 25)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Intervall_Radio = GUICtrlCreateRadio("Intervall", 632, 320, 113, 17)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Intervall_Input = GUICtrlCreateInput($Intervall, 832, 320, 121, 21)
$Aktueller_Ping = GUICtrlCreateLabel("Aktueller Ping:", 120, 520, 500, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Benutzername_Input = GUICtrlCreateInput($Benutzername, 632, 386, 129, 21)
$Passwort_Input = GUICtrlCreateInput($Passwort, 784, 386, 109, 21, $ES_PASSWORD)
$SSL_Check = GUICtrlCreateCheckbox("SSL", 904, 386)
$Benutzername_Label = GUICtrlCreateLabel("Benutzername", 632, 362, 109, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Passwort_Label = GUICtrlCreateLabel("Passwort", 784, 362, 109, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Zieladresse_Label = GUICtrlCreateLabel("Ziel-EMail", 632, 416, 109, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Zieladresse_Input = GUICtrlCreateInput($EMail, 632, 440, 129, 21)
$SMTP_Label = GUICtrlCreateLabel("SMTP-Server", 784, 416, 109, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$SMTP_Input = GUICtrlCreateInput($Smtp, 784, 440, 109, 21)
$Port_Label = GUICtrlCreateLabel("Port", 904, 416, 69, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Port_Input = GUICtrlCreateInput($Port, 904, 440, 49, 21)
$Delete_Button = GUICtrlCreateButton("Löschen", 632, 480, 75, 25, 0)
$Ende_Button = GUICtrlCreateButton("Ende", 792, 480, 75, 25, 0)
$Start_Button = GUICtrlCreateButton("Start", 880, 480, 75, 25, 0)
$Lade_Button = GUICtrlCreateButton("Lade Daten", 8, 520, 75, 25, 0)
$Testmail_Button = GUICtrlCreateButton("Test-Mail", 792, 520, 75, 25, 0)
$Close_Button = GUICtrlCreateButton("Beenden", 880, 520, 75, 25, 0)
GUISetState(@SW_SHOW)
GUICtrlSetOnEvent($Start_Button, "_Start")
GUICtrlSetOnEvent($Ende_Button, "_End")
GUICtrlSetOnEvent($Close_Button, "_Close")
GUISetOnEvent($GUI_EVENT_CLOSE, "_Close")
GUICtrlSetOnEvent($Lade_Button, "_LadeDaten")
GUICtrlSetOnEvent($Insert, "_SchreibeDaten")
GUICtrlSetOnEvent($Delete_Button, "_Delete")
GUICtrlSetOnEvent($Testmail_Button, "_Testmail")
#endregion GUI
Call("_LadeDaten")
[/autoit] [autoit][/autoit] [autoit]If $ProgrammStatus = 1 Then
AdlibRegister("_Ziel_Status", 1000)
EndIf
While 1
[/autoit] [autoit][/autoit] [autoit]Sleep(100) ;damit er nicht 100% cpu verbrauch
[/autoit] [autoit][/autoit] [autoit]If $Laufzeit > 1000 Then
Run(@ScriptName)
Sleep(100)
Exit
EndIf
WEnd
[/autoit] [autoit][/autoit] [autoit]Func _Testmail()
[/autoit] [autoit][/autoit] [autoit]$Benutzername = GUICtrlRead($Benutzername_Input)
$Passwort = GUICtrlRead($Passwort_Input)
$EMail = GUICtrlRead($Zieladresse_Input)
$Smtp = GUICtrlRead($SMTP_Input)
$Port = GUICtrlRead($Port_Input)
If $Benutzername <> "" Then ;Wenn Benutzername und Passwort nicht leer sind
If $Passwort <> "" Then ;Wenn Benutzername und Passwort nicht leer sind
If $EMail <> "" Then ;Wenn die Zieladresse nicht leer ist
If $Smtp <> "" Then ;Wenn ein SMTP-Server eingetragen ist
If $Port <> "" Then ;Wenn ein Port eingetragen ist
If StringInStr($EMail, "@") Then
If StringInStr($EMail, " ") Then
MsgBox(16, "!!!Fehler!!!", "In der EMail ist ein Leerzeichen enthalten")
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]If BitAND(GUICtrlRead($SSL_Check), $GUI_CHECKED) Then
[/autoit] [autoit][/autoit] [autoit]$SSL = 1 ;SSL an
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]$SSL = "" ;SSL aus
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]Call("_SchreibeEmail")
Call("_Mail", $Benutzername, $Passwort, "Testmail", $EMail, $Smtp, $Port, $SSL)
EndIf
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]MsgBox(16, "!!!Fehler!!!", "In der EMail fehlt das @ Zeichen")
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]Else
MsgBox(16, "!!!Stop!!!", "Geben Sie einen Port an")
EndIf
Else
MsgBox(16, "!!!Stop!!!", "Geben Sie einen SMTP-Server an")
EndIf
Else
MsgBox(16, "!!!Stop!!!", "Geben Sie eine Zieladresse an")
EndIf
Else
MsgBox(16, "!!!Stop!!!", "Geben Sie ein Passwort an")
EndIf
Else
MsgBox(16, "!!!Stop!!!", "Geben Sie einen Benutzernamen an")
EndIf
EndFunc ;==>_Testmail
[/autoit] [autoit][/autoit] [autoit]Func _Delete()
If $ProgrammStatus = 1 Then ;Test ob Ping bereits ausgeführt wird
MsgBox(16, "!!!Stop!!!", "Ping wird gerade ausgeführt")
Else
$Del = _GUICtrlListView_GetSelectedIndices($Listview) ;Ausgewählter Eintrag in Del schreiben
If $Del = "" Then
MsgBox(16, "!!!Fehler!!!", "Wählen sie einen Eintrag aus") ;wenn kein Eintrag ausgewählt war
Else
$Del = $Del + 1 ;Del um eins erhöhen
_ArrayDelete($Adressen_Array, $Del) ;Eintrag aus Array löschen
$k = 0
$d = 0 ;==> Zähler setzen
FileDelete($Adressen) ;Liste löschen
[/autoit] [autoit][/autoit] [autoit]For $l = 1 To $Adressen_Array[0] Step 1
If $d <> 0 Then ;beim ersten durchlauf nicht durchführen
$k = $k + 1
FileWriteLine($Adressen, $Adressen_Array[$k] & @CRLF) ;Eitnräge schreiben
EndIf
$d = 1
Next
Call("_LadeDaten") ;Daten laden
EndIf
EndIf
EndFunc ;==>_Delete
Func _Start()
[/autoit] [autoit][/autoit] [autoit]FileDelete($Ende)
[/autoit] [autoit][/autoit] [autoit]$Benutzername = GUICtrlRead($Benutzername_Input)
$Passwort = GUICtrlRead($Passwort_Input)
$EMail = GUICtrlRead($Zieladresse_Input)
$Smtp = GUICtrlRead($SMTP_Input)
$Port = GUICtrlRead($Port_Input)
If $ProgrammStatus = 1 Then ;Test ob Ping bereits ausgeführt wird
MsgBox(16, "!!!Stop!!!", "Ping läuft bereits")
Else
If $Benutzername <> "" Then ;Wenn Benutzername und Passwort nicht leer sind
If $Passwort <> "" Then ;Wenn Benutzername und Passwort nicht leer sind
If $EMail <> "" Then ;Wenn die Zieladresse nicht leer ist
If $Smtp <> "" Then ;Wenn ein SMTP-Server eingetragen ist
If $Port <> "" Then ;Wenn ein Port eingetragen ist
If StringRegExp($EMail, "@") Then
If StringRegExp($EMail, " ") Then
MsgBox(16, "!!!Fehler!!!", "In der EMail ist ein Leerzeichen enthalten")
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]If BitAND(GUICtrlRead($SSL_Check), $GUI_CHECKED) Then
[/autoit] [autoit][/autoit] [autoit]$SSL = 1 ;SSL an
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]$SSL = "" ;SSL aus
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]Call("_SchreibeEmail")
IniWrite($ESave, "Running", "Running", "1")
$Intervall = "" ;Setzt Intervall zurück
Call("_Check")
EndIf
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]MsgBox(16, "!!!Fehler!!!", "In der EMail fehlt das @ Zeichen")
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]Else
MsgBox(16, "!!!Stop!!!", "Geben Sie einen Port an")
EndIf
Else
MsgBox(16, "!!!Stop!!!", "Geben Sie einen SMTP-Server an")
EndIf
Else
MsgBox(16, "!!!Stop!!!", "Geben Sie eine Zieladresse an")
EndIf
Else
MsgBox(16, "!!!Stop!!!", "Geben Sie ein Passwort an")
EndIf
Else
MsgBox(16, "!!!Stop!!!", "Geben Sie einen Benutzernamen an")
EndIf
EndIf
EndFunc ;==>_Start
Func _Close()
[/autoit] [autoit][/autoit] [autoit]If $ProgrammStatus <> 0 Then ;Test ob Ping ausgeführt wird
MsgBox(16, "!!!Stop!!!", "Ping läuft noch bitte erst Ping beenden")
Else
Exit
EndIf
EndFunc ;==>_Close
[/autoit] [autoit][/autoit] [autoit]Func _Modus($Modus)
[/autoit] [autoit][/autoit] [autoit]$FirstRun = 1 ;Setzt FirstRun auf 0
$Stop = 0 ;Setzt Stop wieder auf 0
$t = 0 ;Setzt t auf 0
$ProgrammStatus = 1 ;Setzt den ProgrammStatus auf laufend
GUICtrlSetData($Aktueller_Ping, "Aktueller Ping:Ping läuft")
If $Modus = 1 Then
$Intervall = 1000
Call("_Go") ;startet _Start
ElseIf $Modus = 2 Then
$Intervall = $Intervall * 1000
Call("_Go") ;startet _Start
EndIf
EndFunc ;==>_Modus
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _Check()
[/autoit] [autoit][/autoit] [autoit]If GUICtrlRead($Dauerping_Radio) = 1 Then ;Wenn Dauerping gedrückt ist
Call("_Modus", 1)
ElseIf GUICtrlRead($Intervall_Radio) = 1 Then ;Wenn Intervall gedrückt ist
$Intervall = GUICtrlRead($Intervall_Input) ;Intervall Wert einlesen
If $Intervall <> "" Then ;Wenn Intervall nicht leer ist
Call("_Modus", 2) ;Intervall Modus aufrufen
Else
MsgBox(16, "Fehler", "Bitte einen Intervall angeben") ;Ausgabe wenn Intervall leer ist
EndIf
Else
MsgBox(16, "Fehler", "Bitte einen Modus auswählen") ;Wenn kein Modus angegeben ist
EndIf
EndFunc ;==>_Check
[/autoit] [autoit][/autoit] [autoit]Func _End()
$Stop = 1 ;Setzt Stop auf 1
$ProgrammStatus = 0 ;Setzt lauft auf 0
GUICtrlSetData($Aktueller_Ping, "Aktueller Ping: Ping beendet")
AdlibUnRegister("_Ziel_Status")
FileWriteLine($Ende, $Stop)
IniWrite($ESave, "Running", "Running", "0")
EndFunc ;==>_End
Func _Datum()
[/autoit] [autoit][/autoit] [autoit]$Heute = @YEAR & "." & @MON & "." & @MDAY & "|" ;Datum heute
$Time = @HOUR & ":" & @MIN & ":" & @SEC & "|" ;Zeit jetzt
$Datum = $Heute & $Time ; Datum und Zeit zusammensetzen
Return $Datum
EndFunc ;==>_Datum
Func _Go()
[/autoit] [autoit][/autoit] [autoit]$k = -1
[/autoit] [autoit][/autoit] [autoit]For $l = 1 To $Adressen_Array[0] Step 1 ;solange obejekte im array sind
[/autoit] [autoit][/autoit] [autoit]$k = $k + 1
$Dat = _GUICtrlListView_GetItemText($Listview, $k, 0) & "|" & _GUICtrlListView_GetItemText($Listview, $k, 1) & "|" & _GUICtrlListView_GetItemText($Listview, $k, 2) & "|" & _GUICtrlListView_GetItemText($Listview, $k, 3) & "|" & $Benutzername & "|" & $Passwort & "|" & $EMail & "|" & $Smtp & "|" & $Port & "|" & $SSL & "|" & $k & "|" & $Intervall & "|" ;schreibt die Daten für die Pingfunktion
Run('"' & @ScriptDir & '\Ping.exe " "' & $Dat & '"')
Sleep(500)
Next
[/autoit] [autoit][/autoit] [autoit]$Zeit = $Intervall - 100
[/autoit] [autoit][/autoit] [autoit]Call("_Ziel_Status")
Call("_Ziel_Status")
AdlibRegister("_Ziel_Status", $Zeit)
EndFunc ;==>_Go
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _Ziel_Status()
[/autoit] [autoit][/autoit] [autoit]_GUICtrlListView_DeleteAllItems($Listview2)
[/autoit] [autoit][/autoit] [autoit]$k = -1
$o = -1
$off = 0
$Laufzeit = $Laufzeit + 1
For $l = 1 To $Adressen_Array[0] Step 1 ;solange obejekte im array sind
[/autoit] [autoit][/autoit] [autoit]$k = $k + 1
[/autoit] [autoit][/autoit] [autoit]$Status_input = @ScriptDir & "\Status.ini" ;Status einlesen
$Stat = IniRead($Status_input, $k, "Status", "Fehler beim lesen")
$Datum = Call("_Datum") ;Führt Datum aus
[/autoit] [autoit][/autoit] [autoit]If $Stat = "Online" Then
_GUICtrlListView_SetTextBkColor($Listview, 0x00ff00)
$Datum = Call("_Datum") ;Führt Datum aus
[/autoit] [autoit][/autoit] [autoit]_GUICtrlListView_SetItemText($Listview, $k, _GUICtrlListView_GetItemText($Listview, $k, 3), 3)
_GUICtrlListView_SetItemText($Listview, $k, _GUICtrlListView_GetItemText($Listview, $k, 2), 2)
_GUICtrlListView_SetItemText($Listview, $k, _GUICtrlListView_GetItemText($Listview, $k, 1), 1)
_GUICtrlListView_SetItemText($Listview, $k, _GUICtrlListView_GetItemText($Listview, $k, 0), 0)
Else
_GUICtrlListView_SetTextBkColor($Listview, 0x0000fa)
_GUICtrlListView_SetTextBkColor($Listview2, 0x0000fa)
$Datum = Call("_Datum") ;Führt Datum aus
[/autoit] [autoit][/autoit] [autoit]_GUICtrlListView_SetItemText($Listview, $k, _GUICtrlListView_GetItemText($Listview, $k, 3), 3)
_GUICtrlListView_SetItemText($Listview, $k, _GUICtrlListView_GetItemText($Listview, $k, 2), 2)
_GUICtrlListView_SetItemText($Listview, $k, _GUICtrlListView_GetItemText($Listview, $k, 1), 1)
_GUICtrlListView_SetItemText($Listview, $k, _GUICtrlListView_GetItemText($Listview, $k, 0), 0)
$off = 1
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]_GUICtrlListView_SetItemText($Listview, $k, $Stat, 4) ;Status schreiben
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$StatPing = IniRead($Status_input, $k, "Ping", "Fehler beim lesen")
_GUICtrlListView_SetItemText($Listview, $k, $StatPing, 5) ;Status schreiben
If $off = 1 Then
[/autoit] [autoit][/autoit] [autoit]$o = $o + 1
[/autoit] [autoit][/autoit] [autoit]GUICtrlCreateListViewItem("", $Listview2)
_GUICtrlListView_SetItemText($Listview2, $o, _GUICtrlListView_GetItemText($Listview, $k, 5), 5)
_GUICtrlListView_SetItemText($Listview2, $o, _GUICtrlListView_GetItemText($Listview, $k, 4), 4)
_GUICtrlListView_SetItemText($Listview2, $o, _GUICtrlListView_GetItemText($Listview, $k, 3), 3)
_GUICtrlListView_SetItemText($Listview2, $o, _GUICtrlListView_GetItemText($Listview, $k, 2), 2)
_GUICtrlListView_SetItemText($Listview2, $o, _GUICtrlListView_GetItemText($Listview, $k, 1), 1)
_GUICtrlListView_SetItemText($Listview2, $o, _GUICtrlListView_GetItemText($Listview, $k, 0), 0)
$off = 0
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Next
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_Ziel_Status
[/autoit] [autoit][/autoit] [autoit]Func _SchreibeDaten()
If $ProgrammStatus = 1 Then ;Test ob Ping bereits ausgeführt wird
MsgBox(16, "!!!Stop!!!", "Ping wird gerade ausgeführt")
Else
$Kunde = GUICtrlRead($Kunde_Input)
$Beschreibung = GUICtrlRead($Beschreibung_Input)
$IP = GUICtrlRead($IP_Input)
$Timeout = GUICtrlRead($Timeout_Input)
If $Kunde <> "" Then
If $Beschreibung <> "" Then
If $IP <> "" Then
If $Timeout <> "" Then
$Daten = $Kunde & "|" & $Beschreibung & "|" & $IP & "|" & $Timeout & "|"
FileWriteLine($Adressen, $Daten & @CRLF)
Else
MsgBox(16, "!!!Fehler!!!", "Bitte vergewissern Sie sich, dass alle Felder ausgefüllt sind")
EndIf
Else
MsgBox(16, "!!!Fehler!!!", "Bitte vergewissern Sie sich, dass alle Felder ausgefüllt sind")
EndIf
Else
MsgBox(16, "!!!Fehler!!!", "Bitte vergewissern Sie sich, dass alle Felder ausgefüllt sind")
EndIf
Else
MsgBox(16, "!!!Fehler!!!", "Bitte vergewissern Sie sich, dass alle Felder ausgefüllt sind")
EndIf
Call("_LadeDaten")
EndIf
EndFunc ;==>_SchreibeDaten
Func _SchreibeEmail()
[/autoit] [autoit][/autoit] [autoit]FileDelete($ESave)
IniWrite($ESave, "Benutzername", "Benutzername", $Benutzername)
IniWrite($ESave, "EMail", "EMail", $EMail)
IniWrite($ESave, "SMTP", "SMTP", $Smtp)
IniWrite($ESave, "Port", "Port", $Port)
IniWrite($ESave, "SSL", "SSL", $SSL)
EndFunc ;==>_SchreibeEmail
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _LadeDaten()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]If $ProgrammStatus = 1 Then
[/autoit] [autoit][/autoit] [autoit]MsgBox(16, "!!!STOP!!!", "Programm läuft gerade")
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]_GUICtrlListView_DeleteAllItems($Listview)
ReDim $Adressen_Array[1]
ReDim $Adressen_Array[500]
_FileReadToArray($Adressen, $Adressen_Array)
For $l = 1 To $Adressen_Array[0] Step 1
GUICtrlCreateListViewItem($Adressen_Array[$l], $Listview)
Next
EndIf
If FileExists($ESave) Then
[/autoit] [autoit][/autoit] [autoit]$Benutzername = IniRead($ESave, "Benutzername", "Benutzername", "Fehler beim auslesen")
$EMail = IniRead($ESave, "EMail", "EMail", "Fehler beim auslesen")
$Smtp = IniRead($ESave, "SMTP", "SMTP", "Fehler beim auslesen")
$Port = IniRead($ESave, "Port", "Port", "Fehler beim auslesen")
$SSL = IniRead($ESave, "SSL", "SSL", "Fehler beim auslesen")
GUICtrlSetData($Benutzername_Input, $Benutzername) ;Benutzername in Feld schreiben
GUICtrlSetData($Zieladresse_Input, $EMail) ;Email in Feld schreiben
GUICtrlSetData($SMTP_Input, $Smtp) ;Smtp in Feld schreiben
GUICtrlSetData($Port_Input, $Port) ;Port in Feld schreiben
If $SSL <> "" Then
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetState($SSL_Check, $GUI_CHECKED)
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetState($SSL_Check, $GUI_UNCHECKED)
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]$ProgrammStatus = IniRead($ESave, "Running", "Running", "0")
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_LadeDaten
[/autoit]Pingfunktion Code:
Spoiler anzeigen
#cs --------------------------------------------------------------------------------------------------------
Name: Pingfunktion
Author: I3asti
#ce ---
#NoTrayIcon
#include "file.au3"
#include "mail.au3"
#include "date.au3"
#include "EditConstants.au3"
#include "Array.au3"
Dim $IP, $Kunde, $Beschreibung, $Timeout, $Intervall, $File, $t, $Server, $Benutzername, $Passwort, $EMail, $Smtp, $Port, $SSL, $Nummer, $Status_output, $Ping, $Status_Anderung, $Datum_Anderung, $Status, $Ping_output, $Restart
$FirstRun = 0
$Status_End1 = 1
$Status_End2 = 2
$Ende = @ScriptDir & "\Ende.txt"
$Adressen = @ScriptDir & "\Data.txt"
Global $Stop[5]
$Stop[1] = 0
$Zahler = 0
Call("_Ziel_Status")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _Datum()
[/autoit] [autoit][/autoit] [autoit]$Heute = @YEAR & "." & @MON & "." & @MDAY & "|" ;Datum heute
$Time = @HOUR & ":" & @MIN & ":" & @SEC & "|" ;Zeit jetzt
$Datum = $Heute & $Time ; Datum und Zeit zusammensetzen
Return $Datum
EndFunc ;==>_Datum
Func _FirstRun()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$Datum = Call("_Datum") ;Führt Datum aus
$Datum_Anderung = $Datum ;Datum Anderung wird für Aktuellen Eintrag gesetzt
If $Ping Then ;ping ausführen
[/autoit] [autoit][/autoit] [autoit]FileWriteLine($File, "Ping gestartet Status:|Online" & "|" & $Datum & @CRLF) ;positiv
IniDelete($Status_output, $Nummer, "Status")
IniWrite($Status_output, $Nummer, "Status", "Online")
$Status = 1 ;Status schreiben
$Letzte_Ping = $Datum ; Letzte Ping Zeit setzen
$Status_Anderung = 2
Else
[/autoit] [autoit][/autoit] [autoit]FileWriteLine($File, "Ping gestartet Status:|Offline" & "|" & $Datum & @CRLF) ;positiv
IniDelete($Status_output, $Nummer, "Status")
IniWrite($Status_output, $Nummer, "Status", "Offline")
$Status = 2 ;Status schreiben
$Letzte_Ping = $Datum ; Letzte Ping Zeit setzen
$Status_Anderung = 1
EndIf
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_FirstRun
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _Status_Anderung($Status)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$Datum = Call("_Datum") ;Führt Datum aus
[/autoit] [autoit][/autoit] [autoit]$Letzte_Ping = $Datum
[/autoit] [autoit][/autoit] [autoit]$Letzte_Ping = StringSplit($Letzte_Ping, "|")
IniDelete($Status_output, $Nummer, "Ping")
IniWrite($Status_output, $Nummer, "Ping", $Letzte_Ping[2])
If $Status = 1 Then ;Wird Bei Status 1 ausgeführt
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]If $Status_Anderung = $Status Then ;Wird bei einer Statusänderung ausgeführt
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Sleep(5000)
$Ping = Ping($IP, $Timeout);Pingt
If $Ping Then
IniDelete($Status_output, $Nummer, "Status")
IniWrite($Status_output, $Nummer, "Status", "Online")
Call("_Schreiben", 1) ;Schreiben war Offline
$Datum_Anderung = $Datum
$Status_Anderung = 2
EndIf
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]If $Status_Anderung = $Status Then ;Wird bei einer Statusänderung ausgeführt
[/autoit] [autoit][/autoit] [autoit]Sleep(5000)
$Ping = Ping($IP, $Timeout);Pingt
If $Ping Then
Else
[/autoit] [autoit][/autoit] [autoit]IniDelete($Status_output, $Nummer, "Status")
IniWrite($Status_output, $Nummer, "Status", "Offline")
Call("_Schreiben", 2) ;Schreiben war Online
$Datum_Anderung = $Datum
$Status_Anderung = 1
EndIf
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]$FirstRun = 1 ;wird auf 2ten durchlauf gesetzt
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_Status_Anderung
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _Schreiben($Modus)
[/autoit] [autoit][/autoit] [autoit]If $FirstRun = 1 Then ;beim ersten durchlauf nicht ausführen
[/autoit] [autoit][/autoit] [autoit]$Datum = Call("_Datum") ;Führt Datum aus
[/autoit] [autoit][/autoit] [autoit]If $Modus = 1 Then
[/autoit] [autoit][/autoit] [autoit]Call("_Mail", $Benutzername, $Passwort, $Server & " ist Online gegangen", $EMail, $Smtp, $Port, $SSL)
$Text = "Server war|Offline|" & $Datum_Anderung & $Datum ;Ausgabetext
FileWriteLine($File, $Text & @CRLF) ;Ausgabe speichern
Else
[/autoit] [autoit][/autoit] [autoit]Call("_Mail", $Benutzername, $Passwort, $Server & " ist Offline gegangen", $EMail, $Smtp, $Port, $SSL)
$Text = "Server war|Online|" & $Datum_Anderung & $Datum ;Ausgabetext
FileWriteLine($File, $Text & @CRLF) ;Ausgabe speichern
EndIf
[/autoit] [autoit][/autoit] [autoit]EndIf
EndFunc ;==>_Schreiben
Func _Ende()
[/autoit] [autoit][/autoit] [autoit]$Datum = Call("_Datum") ;Führt Datum aus
[/autoit] [autoit][/autoit] [autoit]If $Ping Then ;ping ausführen
FileWriteLine($File, "Ping beendet Status:|Online" & "|" & $Datum & @CRLF) ;positiv
Else
FileWriteLine($File, "Ping beendet Status:|Offline" & "|" & $Datum & @CRLF);negativ
EndIf
Exit
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_Ende
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _Ziel_Status()
[/autoit] [autoit][/autoit] [autoit]$Datum = Call("_Datum") ;Führt Datum aus
[/autoit] [autoit][/autoit] [autoit]If $CmdLine[0] < 1 Then Exit
[/autoit] [autoit][/autoit] [autoit]$string = $CmdLine[1] ;Adresse in string speichern
$stringsplit = StringSplit($string, "|") ;string splitten
$Kunde = $stringsplit[1] ;Kunde in Variable schreiben
$Beschreibung = $stringsplit[2] ;Beschreibung in Variable schreiben
$IP = $stringsplit[3] ;IP in Variable schreiben
$Timeout = $stringsplit[4] ;Timeout in Variable schreiben
$Benutzername = $stringsplit[5] ;Benutzername in Variable schreiben
$Passwort = $stringsplit[6] ;Passwort in Variable schreiben
$EMail = $stringsplit[7] ;EMail in Variable schreiben
$Smtp = $stringsplit[8] ;Smtp in Variable schreiben
$Port = $stringsplit[9] ;Port in Variable schreiben
$SSL = $stringsplit[10] ;SSL in Variable schreiben
$Nummer = $stringsplit[11] ;Nummer in Variable schreiben
$Intervall = $stringsplit[12] ;Intervall in Variable schreiben
$First = $stringsplit[13] ;In Variable schreiben ob Programm schon gelaufen ist
If $stringsplit[0] = 15 Then
$Status = $stringsplit[14] ;Status in Variable schreiben
$Status_Anderung = $stringsplit[15] ;Statusänderung in Variable schreiben
$Restart = $CmdLine[1] ;CmdLine in Restart schreiben
$Restart = StringTrimRight($Restart, 4) ;Restart kürzen
EndIf
If $First <> "" Then
$FirstRun = 1
Else
$FirstRun = 0
$Restart = $CmdLine[1] & "1" ;CmdLine FirstRun auf 1 setzen
EndIf
If $SSL <> "" Then
$SSL = 1
Else
$SSL = 0
EndIf
$Status_output = @ScriptDir & "\Status.ini" ;hier wird der Status gespeichert
[/autoit] [autoit][/autoit] [autoit]If FileExists(@ScriptDir & "\Protokolle\") Then ;wenn der Ordner existiert soll nichts gemacht werden
Else
DirCreate(@ScriptDir & "\Protokolle") ;wenn nicht soll er erstellt werden
EndIf
$Server = $Kunde & "." & $Beschreibung & "(" & $IP & ")"
$File = @ScriptDir & "\Protokolle\" & $Server & ".txt"
$Server = "Kunde: " & $Kunde & @CRLF & "Beschreibung: " & $Beschreibung & @CRLF & "IP: " & $IP ;File Name
While 1
[/autoit] [autoit][/autoit] [autoit]$Zahler = $Zahler + 1
[/autoit] [autoit][/autoit] [autoit]If $Zahler > 2500 Then
[/autoit] [autoit][/autoit] [autoit]$Restart &= "|" & $Status & "|" & $Status_Anderung ;Status, Statusänderung hinzufügen
[/autoit] [autoit][/autoit] [autoit]Run('"' & @ScriptDir & '\Ping.exe " "' & $Restart & '"') ;Script neu starten
Sleep(100)
Exit
EndIf
If $t <> 0 Then ;beim ersten ausführen nicht ausführen
Sleep($Intervall)
EndIf
$t = 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$Ping = Ping($IP, $Timeout);Pingt
[/autoit] [autoit][/autoit] [autoit]If $FirstRun = 0 Then ;beim ersten durchlauf ausführen
[/autoit] [autoit][/autoit] [autoit]Call("_FirstRun") ;erster durchlauf
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]If $Ping Then ;wenn ping true ist
[/autoit] [autoit][/autoit] [autoit]Call("_Status_Anderung", 1) ;positiv aufruf
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Else ;wenn ping false ist
[/autoit] [autoit][/autoit] [autoit]Call("_Status_Anderung", 2) ;negativ aufruf
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]_FileReadToArray($Ende, $Stop)
[/autoit] [autoit][/autoit] [autoit]If $Stop[1] = 1 Then ;leitet exit Sequenz ein
[/autoit] [autoit][/autoit] [autoit]$Datum = Call("_Datum") ;Führt Datum aus
[/autoit] [autoit][/autoit] [autoit]If $Status_End2 = $Status Then ;wenn die Netzwerkverbindung getrennt war
[/autoit] [autoit][/autoit] [autoit]$Letzte_Ping = $Datum
FileDelete($Status_output)
FileWriteLine($Status_output, "Online")
$Letzte_Ping = StringSplit($Letzte_Ping, "|")
FileDelete($Ping_output)
FileWriteLine($Ping_output, $Letzte_Ping[2])
$Text = "Server war|Offline|" & $Datum_Anderung & $Datum ;Ausgabetext
FileWriteLine($File, $Text & @CRLF) ;Ausgabe speichern
Call("_Ende")
ElseIf $Status_End1 = $Status Then ;wenn die Netzwerkverbindung bestand
[/autoit] [autoit][/autoit] [autoit]$Letzte_Ping = $Datum
FileDelete($Status_output)
FileWriteLine($Status_output, "Offline")
$Letzte_Ping = StringSplit($Letzte_Ping, "|")
FileDelete($Ping_output)
FileWriteLine($Ping_output, $Letzte_Ping[2])
$Text = "Server war|Online|" & $Datum_Anderung & $Datum ;Ausgabetext
FileWriteLine($File, $Text & @CRLF) ;Ausgabe speichern
Call("_Ende")
EndIf
[/autoit] [autoit][/autoit] [autoit]ExitLoop
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]WEnd
EndFunc ;==>_Ziel_Status
Mail Code:
Spoiler anzeigen
#cs --------------------------------------------------------------------------------------------------------
Name: mail
Description: Send Mails
[/autoit] [autoit][/autoit] [autoit]Author: Jos
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Changed by I3asti
[/autoit] [autoit][/autoit] [autoit]Added _Mail($Name, $Password, $Body, $ToAddress, $SmtpServer) Function
#ce --------------------------------------------------------------------------------------------------------
;##################################
; Include
;##################################
#include "file.au3"
;##################################
; Variables
;##################################
$Subject = "Server-Ping" ; subject from the email - can be anything you want it to be
$AttachFiles = "" ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed
$CcAddress = "" ; address for cc - leave blank if not needed
$BccAddress = "" ; address for bcc - leave blank if not needed
$Importance = "Normal" ; Send message priority: "High", "Normal", "Low"
;~ $IPPort = 25 ; port used for sending the mail
;~ $ssl = 0 ; enables/disables secure socket layer sending - put to 1 if using httpS
;~ $IPPort = 465 ; GMAIL port used for sending the mail
;~ $ssl = 1 ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS
;##################################
; Script
;##################################
Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
Func _Mail($Username, $Password, $Body, $ToAddress, $SmtpServer, $IPPort, $ssl)
[/autoit] [autoit][/autoit] [autoit]$FromName = $Username ; name from who the email was sent
$stringsplit = StringSplit($Username,"@")
$Username = $stringsplit[1]
$FromAddress = $Username & "@ping.de" ; address from where the mail should come
$mail = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
EndFunc ;==>_Mail
; The UDF
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance = "Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
Local $objEmail = ObjCreate("CDO.Message")
$objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
$objEmail.To = $s_ToAddress
Local $i_Error = 0
Local $i_Error_desciption = ""
If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
$objEmail.Subject = $s_Subject
If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then
$objEmail.HTMLBody = $as_Body
Else
$objEmail.Textbody = $as_Body & @CRLF
EndIf
If $s_AttachFiles <> "" Then
Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
For $x = 1 To $S_Files2Attach[0]
$S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
;~ ConsoleWrite('@@ Debug : $S_Files2Attach[$x] = ' & $S_Files2Attach[$x] & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
If FileExists($S_Files2Attach[$x]) Then
ConsoleWrite('+> File attachment added: ' & $S_Files2Attach[$x] & @LF)
$objEmail.AddAttachment($S_Files2Attach[$x])
Else
ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
SetError(1)
Return 0
EndIf
Next
EndIf
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
If Number($IPPort) = 0 Then $IPPort = 25
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
;Authenticated SMTP
If $s_Username <> "" Then
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
EndIf
If $ssl Then
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
EndIf
;Update settings
$objEmail.Configuration.Fields.Update
; Set Email Importance
Switch $s_Importance
Case "High"
$objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "High"
Case "Normal"
$objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "Normal"
Case "Low"
$objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "Low"
EndSwitch
$objEmail.Fields.Update
; Sent the Message
$objEmail.Send
If @error Then
SetError(2)
Return $oMyRet[1]
EndIf
$objEmail = ""
EndFunc ;==>_INetSmtpMailCom
;
;
; Com Error Handler
Func MyErrFunc()
$HexNumber = Hex($oMyError.number,
$oMyRet[0] = $HexNumber
$oMyRet[1] = StringStripWS($oMyError.description, 3)
ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF)
SetError(1); something to check for when this function returns
Return
EndFunc ;==>MyErrFunc
vll hat ja noch jemand Verbesserungsvorschläge