Hallo,
ich habe mir hier was zum "überwachen" geschrieben was ich zur Fehlerentdeckung benutzen möchte.
Der Server horcht auf Nachrichten und zeigt diese momentan an und schreibt die Meldungen in Logfiles.
Der Client schickt beim Start und auch bei weiteren Ereignissen Meldungen an den Server.
Zusätzlich kann der Client den PC Herunterfahren/Neustarten.
Ich habe dies nun mit ein paar PCs ausprobiert und diese automatisiert neu starten lassen (und das Programm per Registry jedesmal starten lassen).
Das Problem das ich habe liegt darin das manche TCPSends verschwinden, das heißt diese nur mit "" (also ohne Inhalt) beim Server ankommt. Hat jemand eine Ahnung woran das liegen kann ?
Server:
Spoiler anzeigen
#cs ----------------------------------------------------------------------------
Version: 3.2.1.12 (beta)
#ce ----------------------------------------------------------------------------
; Script Start - Add your code below here
[/autoit] [autoit][/autoit] [autoit];SERVER!! Start Me First !!!!!!!!!!!!!!!
#include <GUIConstants.au3>
#Include <Date.au3>
; Change to OnEvent mode
Opt("GUIOnEventMode", 1)
; Set Some reusable info
; Set your Public IP address (@IPAddress1) here.
Dim $szIPADDRESS = @IPAddress1
Dim $nPORT = 33891
; Create a GUI for messages
;==============================================
Dim $GOOEY = GUICreate("My Server (IP: " & $szIPADDRESS & ")",600,200)
Dim $edit = GUICtrlCreateEdit("",10,10,580,180)
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents", $GOOEY)
GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents", $GOOEY)
GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents", $GOOEY)
GUISetState()
while 1
; Start The TCP Services
;==============================================
TCPStartUp()
; Create a Listening "SOCKET".
; Using your IP Address and Port 33891.
;==============================================
$MainSocket = TCPListen($szIPADDRESS, $nPORT)
; If the Socket creation fails, exit.
If $MainSocket = -1 Then Exit
; Initialize a variable to represent a connection
;==============================================
Dim $ConnectedSocket = -1
;Wait for and Accept a connection
;==============================================
Do
$ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1
Dim $recv
[/autoit] [autoit][/autoit] [autoit]; Try to receive (up to) 2048 bytes
;----------------------------------------------------------------
$recv = TCPRecv( $ConnectedSocket, 2048 )
; If the receive failed with @error then the socket has disconnected
;----------------------------------------------------------------
If @error Then
;MsgBox(0, "@Error", "TCPReceive failed")
WriteLog("TCPReceive failed @Error")
ExitLoop
EndIf
; Update the edit control with what we have received
;----------------------------------------------------------------
; Get IP of client connecting
$szIP_Accepted = 0
while $szIP_Accepted = 0
$szIP_Accepted = SocketToIP($ConnectedSocket)
WEnd
If $recv <> "" Then
GUICtrlSetData($edit, $szIP_Accepted & @TAB & _Now() & @TAB & $recv & @CRLF & GUICtrlRead($edit))
WriteLog($recv, $szIP_Accepted)
Else
;MsgBox(0, "<Else>", "TCPReceive failed")
WriteLog("TCPReceive failed <Else>", $szIP_Accepted)
EndIf
if $ConnectedSocket <> -1 Then TCPCloseSocket( $ConnectedSocket )
TCPShutDown()
WEnd
; Function to return IP Address from a connected socket.
;----------------------------------------------------------------------
Func SocketToIP($SHOCKET)
Local $sockaddr = DLLStructCreate("short;ushort;uint;char[8]")
Local $aRet = DLLCall("Ws2_32.dll","int","getpeername","int",$SHOCKET, _
"ptr",DLLStructGetPtr($sockaddr),"int_ptr",DLLStructGetSize($sockaddr))
If Not @error And $aRet[0] = 0 Then
$aRet = DLLCall("Ws2_32.dll","str","inet_ntoa","int",DLLStructGetData($sockaddr,3))
If Not @error Then $aRet = $aRet[0]
Else
$aRet = 0
EndIf
$sockaddr = 0
Return $aRet
EndFunc
; Funktion um in das Logfile zu schreiben
Func WriteLog($text, $ip)
;MsgBox(0, "Info", $text, 5)
$fso = FileOpen("C:\IPC_Daten\" & $ip & ".log", 1)
; Wenn das Logfile nicht geöffnet werden konnte, dann Fehlermeldung anzeigen und PC neu starten
if $fso = -1 Then
$fsoError = FileOpen("C:\IPC_Daten\IPC_Error.log", 1)
FileWriteLine($fsoError, _NOW() & @TAB & "Konnte Logfile <<" & $logFileName & ">> nicht schreiben:" & @TAB & $text)
FileClose($fsoError)
MsgBox(0, "Fehler", "Konnte das Logfile <<" & $logFileName & ">> nicht öffnen. Bitte informieren Sie IT2.1.", 600000)
Else
FileWriteLine($fso, _NOW() & @TAB & $text)
FileClose($fso)
endIf
EndFunc
Func SpecialEvents()
;MsgBox(0, "SpecialEvents", @GUI_CTRLID)
Select
Case @GUI_CTRLID = $GUI_EVENT_CLOSE
;MsgBox(0, "Close Pressed", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
Exit
Case @GUI_CTRLID = $GUI_EVENT_MINIMIZE
;MsgBox(0, "Window Minimized", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
Case @GUI_CTRLID = $GUI_EVENT_RESTORE
;MsgBox(0, "Window Restored", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
EndSelect
EndFunc
Client:
Spoiler anzeigen
#include <GUIConstants.au3>
#Include <date.au3>
#Include <GuiListView.au3>
#include <misc.au3>
; Change to OnEvent mode
Opt("GUIOnEventMode", 1)
Opt("TrayOnEventMode",1)
Opt("TrayAutoPause",0)
Opt("TrayMenuMode",1)
Opt("OnExitFunc", "endscript")
dim $logFileName = @ScriptDir & "\Shutdown_IPC.log"
dim $servername = "xxx"
WriteLog("Skript gestartet")
[/autoit] [autoit][/autoit] [autoit];*********************************************************************************************************************************************
;********* Modus Produktiv/Test <<ANFANG>>
;*********************************************************************************************************************************************
;dim $modus = 1 ;Test
dim $modus = 0 ;Produktiv
if $modus = 1 then
$servername = "xxx"
ElseIf $modus = 0 then
$servername = "xxx"
EndIf
;*********************************************************************************************************************************************
;********* Modus Produktiv/Test <<ENDE>>
;*********************************************************************************************************************************************
;*********************************************************************************************************************************************
;********* System Tray Management <<ANFANG>>
;*********************************************************************************************************************************************
TraySetIcon("Shutdown.ico")
TraySetClick(8) ; nur bei Rechtsklick wird das Menü angezeigt
TraySetOnEvent(-7, "abort") ; bei Linksklick wird die Gui gezeigt
$tmShutdown = TrayCreateMenu("Shutdown")
$tms1 = TrayCreateItem("Arbeitsende", $tmShutdown)
TrayItemSetOnEvent($tms1, "menu_shutdownNow_1")
$tms2 = TrayCreateItem("Wartung", $tmShutdown)
TrayItemSetOnEvent($tms2, "menu_shutdownNow_2")
$tms3 = TrayCreateItem("Problembehebung", $tmShutdown)
TrayItemSetOnEvent($tms3, "menu_shutdownNow_3")
$tms4 = TrayCreateItem("Umbau der Hardware", $tmShutdown)
TrayItemSetOnEvent($tms4, "menu_shutdownNow_4")
TrayCreateItem("")
[/autoit] [autoit][/autoit] [autoit]$tmRestart = TrayCreateMenu("Restart")
$tmr1 = TrayCreateItem("Wartung", $tmRestart)
TrayItemSetOnEvent($tmr1, "menu_restartNow_1")
$tmr2 = TrayCreateItem("Problembehebung", $tmRestart)
TrayItemSetOnEvent($tmr2, "menu_restartNow_2")
TrayCreateItem("")
[/autoit] [autoit][/autoit] [autoit]$tmLogOff = TrayCreateMenu("Log Off")
$tml1 = TrayCreateItem("Log Off", $tmLogOff)
TrayItemSetOnEvent($tml1, "logoff")
TrayCreateItem("")
[/autoit] [autoit][/autoit] [autoit]$tmGUI = TrayCreateMenu("Zeige Grafische Oberfläche (GUI)")
$tmg1 = TrayCreateItem("GUI Anzeigen", $tmGUI)
TrayItemSetOnEvent($tmg1, "abort")
$tmg2 = TrayCreateItem("GUI Verbergen", $tmGUI)
TrayItemSetOnEvent($tmg2, "gui_verbergen")
if $modus = 1 Then
TrayCreateItem("")
$tmGUI = TrayCreateMenu("Exit")
$tmg1 = TrayCreateItem("Exit", $tmGUI)
TrayItemSetOnEvent($tmg1, "programExit")
EndIf
;*********************************************************************************************************************************************
;********* System Tray Management <<ENDE>>
;*********************************************************************************************************************************************
;wenn das Script bereits läuft soll diese Instanz hier beendet werden
[/autoit] [autoit][/autoit] [autoit]If WinExists("IPC Shutdown - Restart") Then
MsgBox(0, "Shutdown_IPC läuft bereits", "Das Programm Shutdown_IPC läuft bereits. Diese Instanz wird beendet.", 10)
WriteLog("Das Programm Shutdown_IPC läuft bereits. Diese Instanz wird beendet.")
Exit
EndIf
; Timer initialisieren um Laufzeit bis Netzwerk erreichbar ist an Server zu übermitteln
sendStartupToServer("Start des Systems")
;*********************************************************************************************************************************************
;********* Main Window <<ANFANG>>
;*********************************************************************************************************************************************
$frmMain = GUICreate("IPC Shutdown - Restart", 600, 375, @DesktopWidth/6, @DesktopHeight/6)
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents", $frmMain)
GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents", $frmMain)
GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents", $frmMain)
GUISetIcon ("Main.ico")
;GUISetBkColor(0xE808080)
WinSetTrans("IPC", "", 220)
WinSetOnTop("IPC", "", 1)
;Menü erstellen
$menuHilfe = GUICtrlCreateMenu ("?")
$menuHilfeAbout = GUICtrlCreateMenuitem("Über diese Software", $menuHilfe)
GUICtrlSetOnEvent($menuHilfeAbout, "about")
;Buttons erstellen
;Reihe 1
$btnShutdown = GUICtrlCreateButton("System Herunterfahren", 50, 50, 225, 225, $BS_BITMAP)
GUICtrlSetOnEvent($btnShutdown, "system_shutdown")
GuiCtrlSetImage($btnShutdown, @ScriptDir & "\Herunterfahren.bmp")
$btnRestart = GUICtrlCreateButton("System Neustarten", 325, 50, 225, 225, $BS_BITMAP)
GUICtrlSetOnEvent($btnRestart, "system_restart")
GuiCtrlSetImage($btnRestart, @ScriptDir & "\Neustarten.bmp")
$btnExit = GUICtrlCreateButton("Abbruch", 50, 300, 225, 50, $BS_BITMAP)
GUICtrlSetOnEvent($btnExit, "programHide")
GuiCtrlSetImage($btnExit, @ScriptDir & "\Exit.bmp")
$btnLogoff = GUICtrlCreateButton("Log Off", 325, 300, 225, 50, $BS_BITMAP)
GUICtrlSetOnEvent($btnLogoff, "logoff")
GuiCtrlSetImage($btnLogoff, @ScriptDir & "\Logoff.bmp")
;GUISetState(@SW_SHOW)
;*********************************************************************************************************************************************
;********* Main Window <<ENDE>>
;*********************************************************************************************************************************************
;*********************************************************************************************************************************************
;********* Child Window Shutdown <<ANFANG>>
;*********************************************************************************************************************************************
$mdi_shutdown = GUICreate("Shutdown-Dialog", 600, 375, @DesktopWidth/6, @DesktopHeight/6)
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents", $mdi_shutdown)
GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents", $mdi_shutdown)
GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents", $mdi_shutdown)
GUISetIcon ("Shutdown.ico")
WinSetTrans("Shutdown", "", 220)
WinSetOnTop("Shutdown", "", 1)
;Reihe 1
$btnShutdownNow = GUICtrlCreateButton("System Herunterfahren", 25, 25, 550, 50, $BS_BITMAP)
GUICtrlSetOnEvent($btnShutdownNow, "shutdownNow")
GuiCtrlSetImage($btnShutdownNow, @ScriptDir & "\Herunterfahren_breit.bmp")
$btnAbort = GUICtrlCreateButton("Abbruch", 25, 300, 550, 50, $BS_BITMAP)
GUICtrlSetOnEvent($btnAbort, "abort")
GuiCtrlSetImage($btnAbort, @ScriptDir & "\Abbrechen.bmp")
;MsgBox(0, "Grund", $btnAbort) ;
; GROUP WITH RADIO BUTTONS
$groupShutdown = GuiCtrlCreateGroup("Grund für das Herunterfahren", 300, 95, 270, 185)
$radioArbeitsende = GuiCtrlCreateRadio("Arbeitsende", 310, 115, 160, 20)
GuiCtrlSetState(-1, $GUI_CHECKED)
$radioWartung = GuiCtrlCreateRadio("Wartung", 310, 155, 160, 20)
$radioProblembehebung = GuiCtrlCreateRadio("Problembehebung", 310, 195, 160, 20)
$radioUmbauDerHardware = GuiCtrlCreateRadio("Umbau der Hardware", 310, 235, 160, 20)
GUICtrlCreateGroup ("",-99,-99,1,1) ;close group
; Buttons zu Steuerung der Radio-Buttons
$btnArbeitsende = GUICtrlCreateButton("Arbeitsende", 30, 115, 260, 30)
GUICtrlSetOnEvent($btnArbeitsende, "grund")
$btnWartung = GUICtrlCreateButton("Wartung", 30, 155, 260, 30)
GUICtrlSetOnEvent($btnWartung, "grund")
$btnProblembehebung = GUICtrlCreateButton("Problembehebung", 30, 195, 260, 30)
GUICtrlSetOnEvent($btnProblembehebung, "grund")
$btnUmbauDerHardware = GUICtrlCreateButton("Umbau der Hardware", 30, 235, 260, 30)
GUICtrlSetOnEvent($btnUmbauDerHardware, "grund")
;*********************************************************************************************************************************************
;********* Child Window Shutdown <<ENDE>>
;*********************************************************************************************************************************************
;*********************************************************************************************************************************************
;********* Child Window Restart <<ANFANG>>
;*********************************************************************************************************************************************
$mdi_restart = GUICreate("Restart-Dialog", 600, 375, @DesktopWidth/6, @DesktopHeight/6)
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents", $mdi_restart)
GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents", $mdi_restart)
GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents", $mdi_restart)
GUISetIcon ("Restart.ico")
WinSetTrans("Restart", "", 220)
WinSetOnTop("Restart", "", 1)
;Reihe 1
$btnRestartNow = GUICtrlCreateButton("System Neustarten", 25, 25, 550, 50, $BS_BITMAP)
GUICtrlSetOnEvent($btnRestartNow, "restartNow")
GuiCtrlSetImage($btnRestartNow, @ScriptDir & "\Neustarten_breit.bmp")
$btnAbort = GUICtrlCreateButton("Abbruch", 25, 300, 550, 50, $BS_BITMAP)
GUICtrlSetOnEvent($btnAbort, "abort")
GuiCtrlSetImage($btnAbort, @ScriptDir & "\Abbrechen.bmp")
;MsgBox(0, "Grund", $btnAbort) ;
; GROUP WITH RADIO BUTTONS
$groupRestart = GuiCtrlCreateGroup("Grund für den Neustart", 300, 95, 270, 185)
$radioRestartWartung = GuiCtrlCreateRadio("Wartung", 310, 115, 160, 20)
GuiCtrlSetState(-1, $GUI_CHECKED)
$radioRestartProblembehebung = GuiCtrlCreateRadio("Problembehebung", 310, 155, 160, 20)
GUICtrlCreateGroup ("",-99,-99,1,1) ;close group
; Buttons zu Steuerung der Radio-Buttons
$btnRestartWartung = GUICtrlCreateButton("Wartung", 30, 115, 260, 30)
GUICtrlSetOnEvent($btnRestartWartung, "grund")
$btnRestartProblembehebung = GUICtrlCreateButton("Problembehebung", 30, 155, 260, 30)
GUICtrlSetOnEvent($btnRestartProblembehebung, "grund")
;*********************************************************************************************************************************************
;********* Child Window Restart <<ENDE>>
;*********************************************************************************************************************************************
While 1
Sleep(60000) ; Idle around
restartNow()
WEnd
Func system_shutdown()
GUISetState(@SW_SHOW, $mdi_shutdown)
GUISetState(@SW_HIDE, $frmMain)
EndFunc
Func system_restart()
GUISetState(@SW_SHOW, $mdi_restart)
GUISetState(@SW_HIDE, $frmMain)
EndFunc
Func abort()
;MsgBox(0, "Grund", @GUI_CTRLID) ;
GUISetState(@SW_HIDE, $mdi_restart)
GUISetState(@SW_HIDE, $mdi_shutdown)
GUISetState(@SW_SHOW, $frmMain)
GUICtrlSetState($radioArbeitsende, $GUI_CHECKED)
GUICtrlSetState($radioRestartWartung, $GUI_CHECKED)
EndFunc
Func programHide()
GUISetState(@SW_HIDE, $frmMain)
EndFunc
Func programExit()
WriteLog("Beginn programExit()")
exit
EndFunc
Func logoff()
WriteLog("Beginn logoff()")
sendMessageToServer("LogOff")
Sleep(2000)
killNetinstaller()
if $modus = 0 Then
Shutdown(4)
EndIf
EndFunc
Func grund()
;MsgBox(0, "Grund", @GUI_CTRLID) ;
Select
;**********************************************************************
;**** Shutdown - <<ANFANG>>
;**********************************************************************
Case @GUI_CTRLID = $btnArbeitsende
GUICtrlSetState($radioArbeitsende, $GUI_CHECKED)
;MsgBox(0, "Grund", "Arbeitsende") ;
Case @GUI_CTRLID = $btnWartung
GUICtrlSetState($radioWartung, $GUI_CHECKED)
;MsgBox(0, "Grund", "Wartung") ;
Case @GUI_CTRLID = $btnProblembehebung
GUICtrlSetState($radioProblembehebung, $GUI_CHECKED)
;MsgBox(0, "Grund", "Problembehebung") ;
Case @GUI_CTRLID = $btnUmbauDerHardware
GUICtrlSetState($radioUmbauDerHardware, $GUI_CHECKED)
;MsgBox(0, "Grund", "Umbau der Hardware") ;
;**********************************************************************
;**** Shutdown - <<ENDE>>
;**********************************************************************
;**********************************************************************
;**** Restart- <<ANFANG>>
;**********************************************************************
Case @GUI_CTRLID = $btnRestartWartung
GUICtrlSetState($radioRestartWartung, $GUI_CHECKED)
;MsgBox(0, "Grund", "Wartung") ;
Case @GUI_CTRLID = $btnRestartProblembehebung
GUICtrlSetState($radioRestartProblembehebung, $GUI_CHECKED)
;MsgBox(0, "Grund", "Problembehebung") ;
;**********************************************************************
;**** Restart - <<ENDE>>
;**********************************************************************
EndSelect
EndFunc
Func shutdownNow()
WriteLog("Beginn shutdownNow()")
if GUICtrlRead($radioArbeitsende) = 1 Then
; Hier den Shutdown-Code eintragen
;MsgBox(0, "Shutdown", "Shutdown - Arbeitsende")
sendMessageToServer("Shutdown - Arbeitsende")
ElseIf GUICtrlRead($radioWartung) = 1 Then
; Hier den Shutdown-Code eintragen
;MsgBox(0, "Shutdown", "Shutdown - Wartung")
sendMessageToServer("Shutdown - Wartung")
ElseIf GUICtrlRead($radioProblembehebung) = 1 Then
; Hier den Shutdown-Code eintragen
;MsgBox(0, "Shutdown", "Shutdown - Problembehebung")
sendMessageToServer("Shutdown - Problembehebung")
ElseIf GUICtrlRead($radioUmbauDerHardware)= 1 Then
; Hier den Shutdown-Code eintragen
;MsgBox(0, "Shutdown", "Shutdown - Umbau")
sendMessageToServer("Shutdown - Umbau")
EndIf
; Script beenden
killNetinstaller()
if $modus = 0 Then
Run(@ScriptDir & "\Shutdown.exe")
Exit
EndIf
EndFunc
;*********************************************************************************************************************************************
;********* Events für den System Tray <<ANFANG>>
;*********************************************************************************************************************************************
Func menu_shutdownNow_1()
GUICtrlSetState($radioArbeitsende, $GUI_CHECKED)
shutdownNow()
EndFunc
Func menu_shutdownNow_2()
GUICtrlSetState($radioWartung, $GUI_CHECKED)
shutdownNow()
EndFunc
Func menu_shutdownNow_3()
GUICtrlSetState($radioProblembehebung, $GUI_CHECKED)
shutdownNow()
EndFunc
Func menu_shutdownNow_4()
GUICtrlSetState($radioUmbauDerHardware, $GUI_CHECKED)
shutdownNow()
EndFunc
Func menu_restartNow_1()
GUICtrlSetState($radioRestartWartung, $GUI_CHECKED)
restartNow()
EndFunc
Func menu_restartNow_2()
GUICtrlSetState($radioRestartProblembehebung, $GUI_CHECKED)
restartNow()
EndFunc
Func gui_verbergen()
GUISetState(@SW_HIDE, $frmMain)
EndFunc
;*********************************************************************************************************************************************
;********* Events für den System Tray <<ENDE>>
;*********************************************************************************************************************************************
Func restartNow()
WriteLog("Beginn restartNow()")
if GUICtrlRead($radioRestartWartung) = 1 Then
; Hier den Restart-Code eintragen
;MsgBox(0, "Shutdown", "Restart - Wartung")
sendMessageToServer("Restart - Wartung")
ElseIf GUICtrlRead($radioRestartProblembehebung) = 1 Then
; Hier den Restart-Code eintragen
;MsgBox(0, "Shutdown", "Restart - Problembehebung")
sendMessageToServer("Restart - Problembehebung")
EndIf
; Script beenden
killNetinstaller()
if $modus = 0 Then
Run(@ScriptDir & "\Restart.exe")
Exit
EndIf
EndFunc
Func killNetinstaller()
while ProcessExists("NiInst32.exe")
;MsgBox(0, "NiInst32.exe existiert", "NiInst32.exe existiert")
WriteLog("Netinstaller läuft noch, wird versucht zu beenden")
ProcessClose("NiInst32.exe")
ProcessWaitClose("NiInst32.exe")
WriteLog("Netinstaller wurde beendet")
Sleep(500)
WEnd
EndFunc
Func sendMessageToServer($message)
TCPStartUp()
;Test ob der Server erreichbar ist.
;==============================================
dim $reachable = 0
dim $secondsUntilNoNetwork = 30
while $reachable <= 0
$reachable = Ping($servername,250)
Sleep(1000)
;Msgbox(0,"Status","Online, roundtrip was:" & $reachable)
;wenn der Server nach 30 Sekunden noch nicht erreichbar ist, wird der Vorgang abgebrochen damit das Skript weiter läuft
$secondsUntilNoNetwork = $secondsUntilNoNetwork -1
if $secondsUntilNoNetwork = 0 then
WriteLog("Konnte Server " & $servername & " nicht erreichen")
ExitLoop
EndIf
WEnd
; Set Some reusable info
;--------------------------
;Dim $szServerPC = @ComputerName
Dim $szServerPC = $servername
; Set $szIPADDRESS to wherever the SERVER is. We will change a PC name into an IP Address
Dim $szIPADDRESS = TCPNameToIP($szServerPC)
;MsgBox(0, "IP-Adresse", $szIPADDRESS)
Dim $nPORT = 33891
; Initialize a variable to represent a connection
;==============================================
Dim $ConnectedSocket = -1
$secondsUntilNoNetwork = 30
while $ConnectedSocket = -1
;Attempt to connect to SERVER at its IP and PORT 33891
;=======================================================
$ConnectedSocket = TCPConnect($szIPADDRESS,$nPORT)
$secondsUntilNoNetwork = $secondsUntilNoNetwork -1
if $secondsUntilNoNetwork = 0 then
WriteLog("Konnte Server " & $servername & " mit TCPConnect nicht verbinden")
ExitLoop
EndIf
WEnd
If @error Then
;Message Box deaktiviert
;MsgBox(4112,"Error","TCPConnect failed with WSA error: " & @error)
WriteLog("TCPConnect failed with WSA error: " & @error)
Else
$secondsUntilNoNetwork = 30
$bytesSend = 0
while $bytesSend = 0
$bytesSend = TCPSend($ConnectedSocket,$message & @TAB & _GetSysUpTime())
Sleep(500)
$secondsUntilNoNetwork = $secondsUntilNoNetwork -1
if $secondsUntilNoNetwork = 0 then
WriteLog("Konnte Server " & $servername & " mit TCPSend nichts senden")
ExitLoop
EndIf
WEnd
if $bytesSend > 0 Then
WriteLog("TCPSend abgesetzt")
EndIf
EndIf
TCPCloseSocket($ConnectedSocket)
TCPShutdown()
EndFunc
Func sendStartupToServer($message)
TCPStartUp()
; Set Some reusable info
;--------------------------
;Test ob der Server erreichbar ist.
;==============================================
dim $reachable = 0
dim $secondsUntilNoNetwork = 30
while $reachable <= 0
$reachable = Ping($servername,250)
Sleep(1000)
;Msgbox(0,"Status","Online, roundtrip was:" & $reachable)
;wenn der Server nach 30 Sekunden noch nicht erreichbar ist, wird der Vorgang abgebrochen damit das Skript weiter läuft
$secondsUntilNoNetwork = $secondsUntilNoNetwork -1
if $secondsUntilNoNetwork = 0 then
WriteLog("Konnte Server " & $servername & " nicht erreichen")
ExitLoop
EndIf
WEnd
;Dim $szServerPC = @ComputerName
Dim $szServerPC = $servername
; Set $szIPADDRESS to wherever the SERVER is. We will change a PC name into an IP Address
Dim $szIPADDRESS = TCPNameToIP($szServerPC)
Dim $nPORT = 33891
; Initialize a variable to represent a connection
;==============================================
Dim $ConnectedSocket = -1
$secondsUntilNoNetwork = 30
while $ConnectedSocket = -1
;Attempt to connect to SERVER at its IP and PORT 33891
;=======================================================
$ConnectedSocket = TCPConnect($szIPADDRESS,$nPORT)
$secondsUntilNoNetwork = $secondsUntilNoNetwork -1
if $secondsUntilNoNetwork = 0 then
WriteLog("Konnte Server " & $servername & " mit TCPConnect nicht verbinden")
ExitLoop
EndIf
WEnd
If @error Then
WriteLog("TCPConnect failed with WSA error: " & @error)
;MsgBox(4112,"Error","TCPConnect failed with WSA error: " & @error)
Else
$secondsUntilNoNetwork = 30
$bytesSend = 0
while $bytesSend = 0
$bytesSend = TCPSend($ConnectedSocket,$message & @TAB & _GetSysUpTime())
Sleep(500)
$secondsUntilNoNetwork = $secondsUntilNoNetwork -1
if $secondsUntilNoNetwork = 0 then
WriteLog("Konnte Server " & $servername & " mit TCPSend nichts senden")
ExitLoop
EndIf
WEnd
if $bytesSend > 0 Then
WriteLog("TCPSend StartUp abgesetzt")
EndIf
EndIf
TCPCloseSocket($ConnectedSocket)
TCPShutdown()
EndFunc
Func _GetSysUpTime()
$ret = DllCall("kernel32.dll", "long", "GetTickCount")
Global $day = 0, $type = "Days", $hour = 0, $min = 0, $sec = 0, $msec = 0, $mtype = "", $stype = "", $mitype = "", $htype = ""
$msec = StringRight("00" & Mod($ret[0], 1000), 3)
_Iif($msec > 1, $mtype = "s", $mtype = "")
$mtype = "Milisecond" & $mtype
$uptime = Floor($ret[0] / 1000)
$sec = StringRight("00" & Mod($uptime, 60), 2)
_Iif($sec > 1, $stype = "s", $stype = "")
$stype = "Second" & $stype
If $uptime >= 60 Then
$uptime = Floor($uptime / 60)
$min = StringRight("00" & Mod($uptime, 60), 2)
_Iif($min > 1, $mitype = "s", $mitype = "")
$mitype = "Minute" & $mitype
$uptime = Floor($uptime / 60)
$hour = StringRight("00" & Mod($uptime, 24), 2)
_Iif($hour > 1, $htype = "s", $htype = "")
$htype = "Hour" & $htype
If $uptime >= 24 Then; convert hours to days
$day = Floor($uptime / 24)
$type = ""
If $day > 1 Then $type = "s"
$type = " Day" & $type & " "
EndIf
EndIf
dim $return = "Laufzeit (D:H:M): " & $day & ":" & $hour & ":" & $min
Return $return
EndFunc
Func about()
MsgBox(0, "About", "Programmiert von Michael Mangelsdorff IT2.1")
EndFunc
; Funktion um in das Logfile zu schreiben
Func WriteLog($text)
;MsgBox(0, "Info", $text, 5)
$fso = FileOpen($logFileName, 1)
FileWriteLine($fso, _NOW() & @TAB & $text)
FileClose($fso)
EndFunc
Func SpecialEvents()
;MsgBox(0, "SpecialEvents", @GUI_CTRLID)
Select
Case @GUI_CTRLID = $GUI_EVENT_CLOSE
;MsgBox(0, "Close Pressed", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
GUISetState(@SW_HIDE)
Case @GUI_CTRLID = $GUI_EVENT_MINIMIZE
;MsgBox(0, "Window Minimized", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
Case @GUI_CTRLID = $GUI_EVENT_RESTORE
;MsgBox(0, "Window Restored", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
EndSelect
EndFunc
Func endscript()
Switch @exitMethod
Case 0
WriteLog("Script beendet durch <<" & "Natural Closing>>")
Case 1
WriteLog("Script beendet durch <<" & "Close by Exit function>>")
Case 2
WriteLog("Script beendet durch <<" & "Close by clicking on exit of the systray>>")
Case 3
WriteLog("Script beendet durch <<" & "Close by user logoff>>")
Case 4
WriteLog("Script beendet durch <<" & "Close by Windows shutdown>>")
EndSwitch
EndFunc
Edit peethebee: Tags korrigiert.