[cmd,vb.net] Uptime eines Rechners bestimmen / TimeSpan formatieren

Gepostet am: Mar 30, 2011 9:49:36 AM

manuell

Im Taskmanager kann man die Uptime ablesen:

Befehlszeile

Unter Windows bis einschließlich 2003 lediglich nur mittels

> net statistics server | findstr "Statistics since"

Der Rückgabewert ist jedoch die Startzeit des Rechners und nicht die Dauer seither.

Für die Uptime als Zeitspanne

> systeminfo | findstr "System.Up.Time"

dies gibt die Zeitspanne seit dem letzten Reboot wieder

ab Windows 7 / 2008 steht unter systeminfo lediglich die Startzeit zur Verfügung.

> systeminfo | findstr "System.Boot.Time"

siehe dazu:

programmatisch

Programmatische Ansätze basieren meist auf der Enviroment.TickCount - Eigenschaft.

Einzelne Attribute, wie beispielsweise die Anzahl der Tage kann man damit in C# beispielsweise so ermitteln:

            TimeSpan myTimeSpan = TimeSpan.FromMilliseconds(Environment.TickCount);

            Console.WriteLine(myTimeSpan.ToString("dd"));

Will man mehrere dieser Attribute im toString verketten muss man die Trennzeichen :.\ entsprechend escapen:

siehe dazu: Benutzerdefinierte TimeSpan-Zeichenfolge.

Will man andere als die dafür vorgesehenen Platzhalter (dd,hh,mm,ss,ffff usw.) verwenden, kann man dies mittels Verkettung der String erzielen. zB:

Benötigt man die Anzahl der verstrichen Tage als Dezimalzahl, empfiehlt sich folgende Vorgehensweise:

Mathematisch gesehen passiert im Hintergrund folgendes, wie hier in VB.NET verdeutlicht.

Uptime

Public Function Uptime() As String         Dim TickCount As Integer = Environment.TickCount         Dim strTxt As String = ""          Debug.Print(TickCount)         'Tage          Dim iDays As Integer = Fix(TickCount / 1000 / 60 / 60 / 24)         If iDays > 0 Then             strTxt = iDays & " Tage "         End If         TickCount = TickCount - (iDays * 1000 * 60 * 60 * 24)          'Stunden          Dim iHour As Integer = Fix(TickCount / 1000 / 60 / 60)         If iHour > 0 Then             strTxt = strTxt & iHour & " Stunden "         End If         TickCount = TickCount - (iHour * 1000 * 60 * 60)          'Minuten         Dim iMinutes As Integer = Fix(TickCount / 1000 / 60)         If iMinutes > 0 Then             strTxt = strTxt & iMinutes & " Minuten "         End If         TickCount = TickCount - (iMinutes * 1000 * 60)          'Sekunden          Dim iSec As Integer = Fix(TickCount / 1000)         If iSec > 0 Then             strTxt = strTxt & iSec & " Sekunden "         End If         TickCount = TickCount - (iSec * 1000)         Return strTxt  End Function