#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include <GUIConstants.au3>
#Region ### START Koda GUI section ### Form=C:\Users\Documents\AutoIt\RechnerUptime\Form1.kxf
$Form1 = GUICreate("Form1", 615, 437, 200, 129)
$Group1 = GUICtrlCreateGroup("Eingaben", 16, 8, 577, 57)
global $iComputer = GUICtrlCreateInput("WDEST1987", 120, 32, 121, 22, BitOR($ES_CENTER,$ES_UPPERCASE))
GUICtrlSetFont(-1, 9, 400, 0, "Calibri")
$Label1 = GUICtrlCreateLabel("Rechnername:", 34, 32, 82, 18)
;GUICtrlSetFont(-1, 9, 400, 0, "Calibri")
$go = GUICtrlCreateButton("Abfragen", 248, 32, 75, 25)
;GUICtrlSetFont(-1, 9, 400, 0, "Calibri")
;$Progress1 = GUICtrlCreateProgress(336, 32, 241, 17, BitOR($PBS_SMOOTH,$WS_BORDER))
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Rechnerinformationen", 16, 80, 577, 345)
;GUICtrlSetFont(-1, 9, 400, 0, "Calibri")
;#################___ Rechnername ___#################
$Icon1 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -16, 32, 104, 32, 32)
$Label2 = GUICtrlCreateLabel("Rechnername:", 72, 112, 82, 18)
$lRechnername = GUICtrlCreateLabel("Rechnername", 168, 112, 100, 18)
;#################___ Letzter Start ___#################
$Icon2 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -28, 32, 144, 32, 32)
$Label4 = GUICtrlCreateLabel("Letzter Start:", 72, 152, 70, 18)
$lLetzter_Start = GUICtrlCreateLabel("Letzter Start", 168, 152, 300, 18)
;#################___ Uptime ___#################
$Icon3 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -22, 32, 184, 32, 32)
$Label6 = GUICtrlCreateLabel("Uptime:", 72, 192, 47, 18)
$lUptime = GUICtrlCreateLabel("Uptime", 168, 192, 300, 18)
;#################___ IP-Adresse ___#################
$Icon4 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -222, 32, 224, 32, 32)
$Label8 = GUICtrlCreateLabel("IP-Adresse:", 72, 232, 65, 18)
$lIPAdresse = GUICtrlCreateLabel("Label9", 168, 232, 300, 18)
;#################___ Arbeitsspeicher ___#################
$Icon5 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -13, 32, 264, 32, 32)
$Label10 = GUICtrlCreateLabel("Arbeitsspeicher:", 72, 272, 93, 18)
$lArbeitsspeicher = GUICtrlCreateLabel("Label11", 168, 272, 300, 18)
;#################___ Prozessor ___#################
$Icon6 = GUICtrlCreateIcon("C:\Windows\System32\imageres.dll", -145, 32, 304, 32, 32)
$Label12 = GUICtrlCreateLabel("Prozessor:", 72, 312, 59, 18)
$lProzessor = GUICtrlCreateLabel("Label13", 168, 312, 450, 24)
;#################___ Betriebssystem ___#################
$Icon7 = GUICtrlCreateIcon("C:\Windows\System32\imageres.dll", -2, 32, 344, 32, 32)
$Label14 = GUICtrlCreateLabel("Betriebssystem:", 72, 352, 91, 18)
$lBetriebssystem = GUICtrlCreateLabel("Label15", 168, 352, 350, 24)
;#################___ Serial ___#################
$Icon8 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -45, 32, 384, 32, 32)
$Label16 = GUICtrlCreateLabel("Serial:", 72, 392, 39, 18)
$lSerialNumber = GUICtrlCreateLabel("Label17", 168, 392, 300, 18)
;#################___ Rechnermodell ___#################
$Icon9 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -208, 336, 104, 32, 32)
$Label18 = GUICtrlCreateLabel("Rechnermodell:", 376, 112, 90, 18)
$lModell = GUICtrlCreateLabel("Label19", 480, 112, 300, 18)
;#################___ Hersteller ___#################
$Icon10 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -208, 336, 144, 32, 32)
$Label20 = GUICtrlCreateLabel("Hersteller:", 376, 152, 62, 18)
$lHersteller = GUICtrlCreateLabel("Label19", 480, 152, 300, 18)
#EndRegion ### END Koda GUI section ###
local $start = 0, $iEnd = 0, $iHours = 0, $iMins = 0, $iSecs = 0
ProgressOn("Status der Abfrage", "Abfrage läuft...", "", 350, 350, 0)
$GesamtDauer = _TicksToTime($iEnd, $iHours, $iMins, $iSecs)
for $i = 1 to $GesamtDauer Step 1
$iPercent = Int($i / $GesamtDauer * 100)
ProgressSet($iPercent, $i & "/" & $GesamtDauer & @TAB & "(" & $iPercent & "%)")
$sComputer = GuiCtrlRead($iComputer)
getSerialNumber($sComputer)
ProgressSet($iPercent, "Completed!")
$iPing = Ping($sComputer, 500)
If Not $iPing Then Return "Rechner nicht erreichbar/offline"
$oWMIService = ObjGet("winmgmts:\\" & $sComputer & "\root\cimv2")
If Not IsObj($oWMIService) Then Return "Fehler beim Verbinden (Admin-PC)"
$oColOperatingSystems = $oWMIService.ExecQuery("Select LastBootUpTime from Win32_OperatingSystem")
For $oOS In $oColOperatingSystems
Local $sBootup = $oOS.LastBootUpTime
Local $sLastBootupTime = __WMIDateStringToDate($sBootup)
$oColOperatingSystems = 0
Local $sUpTime = __FormatUptime($sLastBootupTime)
GUICtrlSetData($lLetzter_Start, __WMIDateStringToDate($sBootup))
GUICtrlSetData($lRechnername, $sComputer)
;Return "Rechnername: " & $sComputer & @CRLF & "Last Boot: " & $sLastBootupTime & @CRLF & "Uptime: " & $sUpTime & @CRLF & "IP-Adresse: "
Func GetMemWMI($sComputer)
;~ ConsoleWrite("Abfrage startet..." & @CRLF)
;~ Local $sLogFileOS = @ScriptDir & "\" & "Arbeitsspeicher" & "_Stand_" & @YEAR & @MON & @MDAY & ".txt"
;~ Local $hOpenLFileOS = FileOpen($sLogFileOS, $FO_Append)
Local $mem, $colItems, $colItem, $ping, $x
Local $sError1 = $sComputer & ";Error 1: " & ";Host ist Offline" & @CRLF
Local $sConsoleError1 = $sComputer & " Error 1: " & "Host ist Offline" & @CRLF
Local $sError2 = $sComputer & ";Error 2: " & ";Host nicht erreichbar" & @CRLF
Local $sConsoleError2 = $sComputer & " Error 2: " & "Host nicht erreichbar" & @CRLF
Local $sError3 = $sComputer & ";Error 3: " & ";Bad destination" & @CRLF
Local $sConsoleError3 = $sComputer & " Error 3: " & "Bad destination" & @CRLF
Local $sError4 = $sComputer & ";Error 4: " & ";Kein Zugriff" & @CRLF
Local $sConsoleError4 = $sComputer & " Error 4: " & "Kein Zugriff" & @CRLF
$ping = Ping($sComputer, 500)
;MsgBox(64, @error, "Host is offline")
;~ FileWriteLine($hOpenLFileOS, $sError1)
;~ ConsoleWrite($sConsoleError1)
;MsgBox(64, @error, "Host is unreachable")
;~ FileWriteLine($hOpenLFileOS, $sError2)
;~ ConsoleWrite($sConsoleError2)
;MsgBox(64, @error, "Bad destination")
;~ FileWriteLine($hOpenLFileOS, $sError3)
;~ ConsoleWrite($sConsoleError3)
;MsgBox(64, @error, "Other errors")
;~ FileWriteLine($hOpenLFileOS, $sError4)
;~ ConsoleWrite($sConsoleError4)
;~ ConsoleWrite($sComputer & " Ping: " & $ping & @CRLF)
$objWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & $sComputer & "\root\cimv2")
If IsObj($objWMIService) Then
$colItems = $objWMIService.ExecQuery("Select Capacity from Win32_PhysicalMemory", "WQL", 0x30)
For $objItem In $colItems
$mem += $objItem.Capacity
$sResultMem = $sComputer & " verfügt über: " & Round($mem / 1024 ^ 3, 2) & " GB" & @CRLF
;~ ConsoleWrite($sComputer & " Arbeitsspeicher: " & Round($mem / 1024 ^3, 2) & " GB" & @CRLF)
;~ FileWriteLine($hOpenLFileOS, $sComputer & " Arbeitsspeicher: " & Round($mem / 1024 ^3, 2) & " GB")
$sResultMem = "Recher nicht erreichbar"
;~ ConsoleWrite($sComputer & " Rechner nicht ABFRAGBAR" & @CRLF)
;~ FileWriteLine($hOpenLFileOS, $sComputer & " Rechner nicht ABFRAGBAR" & @CRLF)
;~ FileClose($hOpenLFileOS)
;~ ConsoleWrite("Abfrage ende!" & @CRLF)
GUICtrlSetData($lArbeitsspeicher, $sResultMem)
Func _LowMetricIP($sHost = $sComputer)
Local $objAdapter, $iMetric = 500, $sActualIP
Local $objWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & $sHost & "\root\cimv2")
If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
Local $colAdapter = $objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration WHERE IPEnabled = True", "WQL", 0x30)
If IsObj($colAdapter) Then
For $objAdapter In $colAdapter
If $objAdapter.IPConnectionMetric < $iMetric And IsString($objAdapter.DefaultIPGateway(0)) Then ; ggf. kann auch die Gateway-Prüfung entfallen !
$sActualIP = $objAdapter.IPAddress(0)
$iMetric = $objAdapter.IPConnectionMetric
GUICtrlSetData($lIPAdresse, $sActualIP)
If $sActualIP Then Return $sActualIP
Func CheckCPU($sComputer)
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$objWMIService = ObjGet("winmgmts:\\" & $sComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
For $objItem In $colItems
$CPUSpeed = $objItem.CurrentClockSpeed
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
For $objItem In $colItems
$Cores = $objItem.NumberOfLogicalProcessors
$Cores = "Konnte nicht ermittelt werden."
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
For $objItem In $colItems
$Processors = $objItem.NumberOfCores
$Processors = "Konnte nicht ermittelt werden."
GUICtrlSetData($lProzessor, "Kerne: " & $Cores & @CRLF & "Prozessor"&"(en)"&": " & $Processors & " je " & Ceiling($CPUSpeed) / 1000 & " Ghz")
;Return "Kerne: " & $Cores & @CRLF & "Taktung: " & @CRLF & "Prozessor: " & $Processors & @CRLF & Ceiling($CPUSpeed) / 1000 & " Ghz"
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$strComputer = $sComputer
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
For $objItem In $colItems
GUICtrlSetData($lBetriebssystem, $OS)
Func getSerialNumber($sComputer)
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$strComputer = $sComputer
$Output = $Output & "Computer: " & $strComputer & @CRLF
$Output = $Output & "==========================================" & @CRLF
;~ $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
$aBIOS = $objWMIService.ExecQuery("Select * from Win32_BIOS")
$SerialNumber = $element.SerialNumber
GUICtrlSetData($lSerialNumber, $SerialNumber)
Return "Seriennummer: " & $SerialNumber
EndFunc ;==>getSerialNumber
$strComputer = $sComputer
$aComputer = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2").ExecQuery("SELECT Model FROM Win32_ComputerSystem", "WQL", 0).ItemIndex(0).Model
GUICtrlSetData($lModell, $aComputer)
Return "Modell: " & $aComputer
Func Hersteller($sComputer)
local $iHours, $iMins, $iSecs
$strComputer = $sComputer
$sHersteller = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2").ExecQuery("Select Name, Manufacturer, Model from Win32_ComputerSystem", "WQL", 0).ItemIndex(0).Manufacturer
GUICtrlSetData($lHersteller, $sHersteller)
Global $iEnd = TimerDiff($start)
Return "Hersteller: " & $sHersteller
Func __WMIDateStringToDate($sBootup)
Return StringLeft($sBootup, 4) & "/" & StringMid($sBootup, 5, 2) & "/" & StringMid($sBootup, 7, 2) & " " & StringMid($sBootup, 9, 2) & ":" & StringMid($sBootup, 11, 2) & ":" & StringMid($sBootup, 13, 2)
EndFunc ;==>__WMIDateStringToDate
Func __FormatUptime($sLastBootupTime)
Local $aDateDiffs = [[0, 24, " day"], [0, 60, " hour"], [0, 60, " minute"], [0, 1, " second"]]
Local $aDateDiff = StringSplit("D|h|n|s", "|")
For $sDiff = 1 To $aDateDiff[0]
$aDateDiffs[$sDiff - 1][0] = _DateDiff($aDateDiff[$sDiff], $sLastBootupTime, $sNow)
Local $iUbound = UBound($aDateDiffs) - 1
For $iX = $iUbound To 0 Step -1
If $aDateDiffs[$iX - 1][0] > 0 Then $aDateDiffs[$iX][0] = ($aDateDiffs[$iX][0] - ($aDateDiffs[$iX - 1][0] * $aDateDiffs[$iX - 1][1]))
If $aDateDiffs[$iX][0] > 0 Then
$sUpTime &= $aDateDiffs[$iX][0] & $aDateDiffs[$iX][2]
If $aDateDiffs[$iX][0] > 1 Then $sUpTime &= "s"
If $iX < $iUbound Then $sUpTime &= ", "
GUICtrlSetData($lUptime, $sUpTime)
EndFunc ;==>__FormatUptime