Jump to content

Server Uptime


Recommended Posts

Hello, I need to add to an existing script the ability to query a list of servers for system uptime and output to a variable and or a txt file. any ideas? Each server is already a variable as Dim $Server1, etc.

Edited by Kondro
Link to comment
Share on other sites

If you want to know how long the server is up and running you could use WMI to query the server.

There is available which creates the necessary AutoIt code for you.

I'm not at my PC at the moment so I can't test but google tells me you have to search in "Win32_PerfFormattedData_PerfOS_System" for "SystemUptime"

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

Here my version (commandline version):

 

[b]#AutoIt3Wrapper_Icon=CMD_48x48.ico
#AutoIt3Wrapper_Change2CUI=y
#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Res_Description=Displays the uptime of a (remote) system
#AutoIt3Wrapper_Res_Fileversion=0.8.0.0
#AutoIt3Wrapper_Res_LegalCopyright=UEZ 2011-2014
#AutoIt3Wrapper_Res_Language=1033
;#AutoIt3Wrapper_Res_Field=Coded by|UEZ
;#AutoIt3Wrapper_Res_Field=Build|2014-09-30
;#AutoIt3Wrapper_Res_Field=Compile date|%longdate% %time%
;#AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
#AutoIt3Wrapper_Run_Au3Stripper=y
#Au3Stripper_Parameters=/so
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_UPX_Parameters=--best --lzma
#AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3"

#RequireAdmin
#NoTrayIcon
#include <Array.au3>
#include <Date.au3>

Opt("MustDeclareVars", 1)
Global Const $ver = "v0.80 Build 2014-09-30"
Global $ip = @ComputerName
If $CmdLine[0] > 0 Then
    If  $CmdLine[1] = "/?" Or  $CmdLine[1] = "/h" Or  $CmdLine[1] = "-?" &  $CmdLine[1] = "-h" Then Help()
    Global Const $sCmdline = _ArrayToString($CmdLine, "", 1)
    Global Const $sHost = StringRegExpReplace($sCmdline, "(?i)-s(.*?)\-.*|-s(.*?)\s*", "$1")
    Global Const $sUser = StringRegExpReplace($sCmdline, "(?i).+-u(.+?)\-.*", "$1")
    Global Const $sPwd = StringRegExpReplace($sCmdline, "(?i).*-p(.*?)", "$1")
;~  ConsoleWrite("*" & $sHost & "*" & @CRLF)
    If $sHost <> "" Then $ip = $sHost
EndIf

Global $aResult, $objWMILocator, $objWMIService, $ping, $colItems

Switch $ip
    Case @ComputerName, "127.0.0.1", "localhost", @IPAddress1, @IPAddress2, @IPAddress3, @IPAddress4
        If @OSBuild < 6000 Then
            $aResult = DllCall("kernel32.dll", "dword", "GetTickCount")
            If @error Or Not IsArray($aResult) Then Exit ConsoleWrite(@LF & "An error has occured - unable to get uptime!" & @LF & @LF)
        Else
            $aResult = DllCall("kernel32.dll", "uint64", "GetTickCount64") ;only available on Vista+ os!
            If @error Or Not IsArray($aResult) Then Exit ConsoleWrite(@LF & "An error has occured - unable to get uptime!" & @LF & @LF)
        EndIf
        ConsolePrintUT(Floor($aResult[0] / 1000))
    Case Else
        $ping = Ping($ip, 500)
        If $ping Then
            $objWMILocator = ObjCreate("WbemScripting.SWbemLocator")
            $objWMIService = $objWMILocator.ConnectServer($ip, "\\.\root\cimv2", $sUser, $sPwd, "", "", 128)
            If @error Then Exit ConsoleWrite(@LF & "An error has occured - unable to get remote WMI connection!" & @LF & @LF)
            $colItems = $objWMIService.ExecQuery("SELECT SystemUpTime FROM Win32_PerfFormattedData_PerfOS_System", "WQL", 0x30)
            If IsObj($colItems) Then
                For $objItem In $colItems
                    ConsolePrintUT($objItem.SystemUpTime)
                Next
            Else
                Exit ConsoleWrite(@LF & "An error has occured - unable to get remote WMI data!" & @LF & @LF)
            EndIf
        Else
            Exit ConsoleWrite(@LF & "An error has occured - no ping reply from remote system " & $ip & "!" & @LF & @LF)
        EndIf

EndSwitch

Func ConsolePrintUT($iSeconds)
    ConsoleWrite(@LF & "Uptime on " & $ip & ": " & Sec_2_Time_Format($iSeconds) & @LF & @LF)
EndFunc

Func Sec_2_Time_Format($time)
    Local $days = 0
    Local $sec = Mod($time, 60)
    Local $min = Mod(Int($time / 60), 60)
    Local $hr = Int($time / 60 ^ 2)
    If $hr > 23 Then
        $days = Floor($hr / 24)
        $hr -= $days * 24
    EndIf
    Return StringFormat("%01id %02i:%02i:%02i // ", $days, $hr, $min, $sec) & _DateAdd("s", -$time, _NowCalc())
EndFunc   ;==>Sec_2_Time_Format

Func Help()
    ConsoleWrite(@CRLF & _
                            "Uptime " & $ver & " by UEZ" & @CRLF & @CRLF & _
                            "Usage: Uptime.exe -s [system] -u [user id] -p [password]" & @CRLF & @CRLF & @CRLF & _
                            "Displays the uptime of a system whereas system can be an ip address or" & @CRLF & _
                            "a hostname (must be reachable!)." & @CRLF & @CRLF & _
                            "Uptime output display format is:" & @CRLF & _
                            "d hh:mm:ss // yyyy/mm/dd hh:mm:ss as system start time " & @CRLF & @CRLF & _
                            "Default system name is the computer name where it has been started when no" & @CRLF & _
                            "parameter was given." & @CRLF & @CRLF)
    Exit
EndFunc[/b]

Remark: Uptime value from Win32_PerfFormattedData_PerfOS_System can differ compared to DllCall("kernel32.dll", "dword", "GetTickCount") when you put your computer to sleep!

Br,

UEZ

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...