phil9678
Goto Top

Batch Systemlaufzeitabfrage

Hallo Administrator.de-Community,
ich habe eine Frage bezüglich einer Batch-Abfrage.
Kann man die Systemlaufzeit per Batch-Befehl abfragen und in einer Variable speichern? Und wenn ja, wie? Es geht hierbei um einen geplanten automatischen Serverrestart unserer Terminalserver. Ein 7-tägiger Reboot ist leider nicht möglich, weil wir die automatischen Reboots nach Windows-Updates aufgrund von Sicherheitsrichtlinien aktiviert haben müssen.
Vielen Dank vorab schonmal für eure Hilfe.
LG euer Phil

Content-ID: 316042

Url: https://administrator.de/forum/batch-systemlaufzeitabfrage-316042.html

Ausgedruckt am: 20.04.2025 um 17:04 Uhr

Kraemer
Kraemer 23.09.2016 aktualisiert um 10:10:02 Uhr
Goto Top
Moin,

eine Lösung mit Powershell kann ich dir anbieten:

$a=((get-date)-(Get-CimInstance -ClassName win32_operatingsystem|%{$_.lastbootuptime})).Days
write-host $a

Gruß Krämer
BirdyB
BirdyB 23.09.2016 um 10:06:50 Uhr
Goto Top
Moin Phil,

hier findest du verschiedene Varianten:
https://www.windowspro.de/wolfgang-sommergut/windows-uptime-remote-erfra ...

Beste Grüße!


Berthold
Friemler
Friemler 25.09.2016 aktualisiert um 23:59:08 Uhr
Goto Top
Hallo Phil,

hier noch eine Batchscript-Variante mit einem Inline-VBScript:
@echo off & setlocal

set "VBScript=%TEMP%\GetUptime.vbs"  

> "%VBScript%" echo.Set objOS         = GetObject("winmgmts:\\.\root\cimv2:Win32_OperatingSystem=@")  
>>"%VBScript%" echo.Set objDateTime   = CreateObject("WbemScripting.SWbemDateTime")  
>>"%VBScript%" echo.  
>>"%VBScript%" echo.objDateTime.Value = objOS.LastBootupTime  
>>"%VBScript%" echo.datBootupTime     = objDateTime.GetVarDate(True)  
>>"%VBScript%" echo.intUptimeSeconds  = DateDiff("s", datBootupTime, Now)  
>>"%VBScript%" echo.  
>>"%VBScript%" echo.intUptimeDays     = Fix(intUptimeSeconds / 86400)  
>>"%VBScript%" echo.intUptimeHours    = Fix(intUptimeSeconds / 3600) Mod 24  
>>"%VBScript%" echo.intUptimeMinutes  = Fix(intUptimeSeconds / 60) Mod 60  
>>"%VBScript%" echo.intUptimeSeconds  = intUptimeSeconds Mod 60  
>>"%VBScript%" echo.  
>>"%VBScript%" echo.WScript.Echo intUptimeDays    ^& ";" ^& _  
>>"%VBScript%" echo.             intUptimeHours   ^& ";" ^&_  
>>"%VBScript%" echo.             intUptimeMinutes ^& ";" ^&_  
>>"%VBScript%" echo.             intUptimeSeconds  

for /f "tokens=2-3 delims=;" %%a in ('cscript /nologo "%VBScript%"') do (  
  echo Uptime: %%a Stunden und %%b Minuten
)

for /f "tokens=1-3 delims=;" %%a in ('cscript /nologo "%VBScript%"') do (  
  echo Uptime: %%a Tage, %%b Stunden und %%c Minuten
)

for /f "tokens=1-4 delims=;" %%a in ('cscript /nologo "%VBScript%"') do (  
  echo Uptime: %%a Tage, %%b Stunden, %%c Minuten und %%d Sekunden
)

del "%VBScript%" > NUL  

Wie schon im PowerShell-Schnipsel von Kraemer wird die WMI-Klasse Win32_OperatingSystem benutzt, um den Zeitpunkt des letzten System-Reboots zu bestimmen. Da Win32_OperatingSystem eine sog. Singleton-Klasse ist, d.h. es gibt nur eine Instanz der Klasse weil es nur ein aktives OS auf dem Rechner geben kann, muss diese Instanz in Zeile 5 mit dem @-Operator ermittelt werden.

Der Wert der Eigenschaft LastBootupTime enthält den gesuchten Wert in einem universellen internationalen Format, das jedoch für die weitere Verarbeitung ungeeignet ist. Deshalb wird er in die Eigenschaft Value eines SWbemDateTime-Objekts übertragen (Zeile 8) und mit Hilfe von dessen Methode GetVarDate ins Format "ShortDate ShortTime" (Formatierung laut Systemsteuerung) konvertiert (Zeile 9).

Mit Hilfe dieses Wertes kann in Zeile 10 mit der DateDiff-Funktion die Anzahl an Sekunden berechnet werden, die seit diesem Zeitpunkt vergangen sind.

In den Zeilen 12 bis 15 wird dieser Wert ins Format Tage, Stunden, Minuten und Sekunden umgerechnet. Diese Werte werden in den Zeilen 17 bis 20 durch Semikolons getrennt ausgegeben.

In den Zeilen 22 bis 32 sind mehrere Beispiele aufgeführt wie das VBScript verwendet werden kann, um die Uptime in unterschiedlicher Detailtiefe auszugeben.

Grüße
Friemler