Uptime von Windows Server remote erfragen über WMI und Powershell

    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.

    Boot-Historie mit uptime.exe auflisten

    Dagegen ist uptime.exe, das aus NT-Zeiten stammt und von Microsofts Website heruntergeladen werden kann, in der Lage, auch Daten von Remote-Computern einzusammeln. Im Gegensatz zu den anderen Tools zeigt es nicht das letzte Boot-Datum, sondern errechnet gleich die seitdem vergangene Zeit. Eine interessante Option bietet sich dabei mit dem Schalter /s, der Boot-Statistiken über einen längeren Zeitraum liefert und so eine gute Übersicht über die Verfügbarkeit einer Maschine ermöglicht.

    uptime server-core /s

    gibt Auskunft darüber, wann der Computer mit dem Namen server-core gestartet bzw. heruntergefahren wurde.

    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.

    4 Kommentare

    Bild von Peter Monadjemi
    27. Februar 2012 - 12:43

    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.

    Bild von Roger
    Roger sagt:
    2. Dezember 2015 - 9:45

    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

    Bild von Roger
    Roger sagt:
    2. Dezember 2015 - 11:50

    Hallo,

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

    Grüße

    Bild von Wolfgang Sommergut
    2. Dezember 2015 - 17:52

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