Uptime von Windows über WMI und Powershell abfragen


    Tags: , ,

    Der Task-Manager zeigt die seit dem letzten Boot-Vorgang verstrichene Zeit, allerdings nur für den lokalen Rechner.Manchmal möchte man wissen, wie lange ein Windows-Server bereits unterbrechungsfrei läuft, also wie viel Zeit seit dem letzten Boot-Vorgang verstrichen ist. Im Gegensatz zu Linux gehört zum Lieferumfang von Windows kein eigener Befehl für diesen Zweck. Allerdings gibt es verschiedene Möglichkeiten, diese Information auszulesen, und zwar auch remote.

    Unter den gängigen Empfehlungen, wie man die Systemlaufzeit ermitteln kann, befindet sich stets der Hinweis auf systeminfo.exe. Das Kommandozeilen-Tool gibt eine Vielzahl von Daten aus, darunter auch das letzte Boot-Datum. Aus dem gesamten Output kann man es via find ausfiltern:

    systeminfo | find /i "Systemstartzeit:"

    Remote-Abfrage mit systeminfo

    Dieses Vorgehen hat jedoch den Nachteil, dass systeminfo.exe ziemlich lange braucht, bis es alle Daten ermittelt hat. Aber immerhin funktioniert es auch remote, indem man den Schalter /s mit dem Namen des Computers verwendet, also beispielsweise:

    systeminfo /s server-core| find /i "Systemstartzeit:"

    Nur lokal: net statistics und Task-Manager

    Flinker ist das auf Microsoft TechNet empfohlene net statistics. Auch hier muss man die eigentliche Information über einen find-Filter extrahieren:

    net statistics server|find /i "Statistik seit"

    Es fällt allerdings auf, dass das Ergebnis von net statistics von dem aller anderen Tools abweicht, zum Teil sogar um Tage. Außerdem funktioniert es nur lokal. Das gilt auch für den Task-Manager, der in der Registerkarte Leistung unter Laufzeit die seit dem letzten Boot-Vorgang verstrichene Zeit angibt.

    WMI-Abfrage mit wmic und Powershell

    Die meisten der genannten Tools bedienen sich wahrscheinlich hinter den Kulissen eines WMI-Aufrufs, um an die geforderten Systemdaten zu kommen. Man kann WMI aber auch explizit nutzen, um die Uptime eines Servers zu ermitteln. Das geht beispielsweise über das Kommandozeilen-Tool wmic:

    wmic /Node:"Computername" OS Get LastBootUpTime

    Der Nachteil von wmic besteht darin, dass die Ausgabe des Datums und der Uhrzeit im Format yyyymmddhhmmss erfolgt und damit ziemlich unübersichtlich ist. Ruft man dagegen die Informationen über WMI in Powershell ab, dann hat man dort die Mittel, die Ausgabe anders zu formatieren:

    $wmi = Get-WmiObject -computername srv -Class Win32_OperatingSystem
    $wmi.converttodatetime($wmi.lastbootuptime)

    Die Funktion converttodatetime gibt Datum und Uhrzeit nicht nur in einem besser lesbaren Format aus, sondern errechnet zusätzlich auch noch den Wochentag.

    Will man die Uptime eines entfernten Rechners erfragen, dann muss ihn über den Parameter -computername angeben. Die Powershell-Variante ist wie immer zu bevorzugen, wenn man die Ausgabe einer WMI-Abfrage in einem Script weiterverarbeiten will.

    Alternativ kann man natürlich auch die neueren CIM-Cmdlets verwenden:

    Get-CimInstance -ClassName Win32_OperatingSystem | Select LastBootUpTime

    Hier muss man am Format der Ausgabe nichts anpassen.

    Task-Manager

    Die Betriebszeit des Rechners kann man auch dem Task-Manager entnehmen. Die entsprechende Information findet sich unter Leistung.

    Uptime im Task-Manager auslesen

    Get-Uptime in PowerShell 6.x und 7.x

    Seit PowerShell 6 steht mit Get-Uptime ein eigenes Cmdlet für diesen Zweck zur Verfügung, das diese Aufgabe deutlich vereinfacht. Ruft man es ohne Parameter auf, gibt es die seit dem letzten Systemstart verflossene Zeit in verschiedenen Einheiten an (Tage, Stunden, Ticks, Millisekunden, etc.).

    Zeit seit dem letzten Boot-Vorgang ermitteln mit Get-Uptime

    Möchte man den Zeitpunkt des letzten Starts erhalten, dann ruft man

    Get-Uptime -Since

    auf.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut

    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Verwandte Beiträge

    Weitere Links

    4 Kommentare

    Bild von Peter Monadjemi

    Gutes Beispiel, das sehr schön zeigt, dass sich in der PowerShell auch Tools verwenden lassen, mit denen Administratoren bereits seit Jahren arbeiten. Der Vorteil von PowerShell kommt immer dann ins Spiel, wenn der Output "objektorientiert" (sprich mit Cmdlets wie Select-Object oder Where-Object) weiterverarbeitet werden soll.

    Hallo,

    mit
    systeminfo| find /i "Systemstartzeit:"

    erhalte ich

    FIND: Ungültige Paramterformat.

    Habe dies jetzt mit select-string gelöst.
    systeminfo| select-string"Systemstartzeit:"

    Grüße

    Hallo,

    Fehler an find war, dass ich es in der PowerShell aufgerufen habe. Über die CMD klappt es.

    Grüße

    Bild von Wolfgang Sommergut

    Hallo Roger, danke für die Ergänzungen! Eine Alternative zu find wäre noch findstr, das auch unter Powershell funktioniert.