• Home

Stoppuhr mit PowerShell realisieren

Möchte man beispielsweise die Dauer einer Verarbeitung messen, kann nicht nur Measure-Command verwendet werden, sondern auch eine klassische Stoppuhr. Doch es ist kein eigenes PS Commandlet, sondern eher eine .NET Klasse auf die zugegriffen wird. Um also eine Stoppuhr mit PowerShell zu realisieren, wird System.Diagnostics.Stopwatch verwendet.

.NET Stoppuhr in PowerShell verwenden

Wie bei .NET Objekten in PowerShell gewohnt, muss erst eine Instanz der Stoppuhr erstellt werden. Das kann man mit folgendem Code erreichen:

$mystopwatch = [system.diagnostics.stopwatch]::StartNew()

Nun existiert ein neues Stopwatch-Objekt mit dem wir arbeiten können. Interessant ist nun, welche Befehle mit PowerShell abgesetzt werden können. Klassisch wäre für eine Stoppuhr das Starten, Anhalten und Zurücksetzen. Alle Methoden erhält man wie gewohnt mit Get-Member:

$mystopwatch | Get-Member

  • Equals
  • GetHashCode
  • GetType
  • Reset
  • Restart
  • Start
  • Stop
  • ToString
  • Elapsed
  • ElapsedMilliseconds}
  • ElapsedTicks
  • IsRunning
Stoppuhr PowerShell

Methoden der Stoppuhr

Das PowerShell Cmdlet Get-Member gibt eine Liste an Methoden und Werte zurück, die mit der .NET Stoppuhr verwendet werden können. Doch was ist alles möglich?

  • Reset() setzt die Stoppuhr auf 0 zurück. Restart() macht eigentlich das Gleiche. Der Unterschied ist lediglich, dass bei Reset() die Uhr stehen bleibt und bei Restart() die Uhr nach dem Zurücksetzen wieder weiterläuft.
  • Start() startet die Stopwatch, falls sie noch nicht läuft.
  • Stop() beendet die Stopwatch, falls diese derzeit läuft.
  • Mit Elapsed() wird die bereits verstrichene Zeit angezeigt.
  • ElapsedMilliseconds() zeigt die verstrichene Zeit in Millisekunden an.
  • Der Wert IsRunning() ist vom Typ Boolean und gibt True oder False zurück.

Mit diesen Methoden können auch in einem PowerShell Script die wichtigsten Methoden und Werte einer Stoppuhr verwendet werden. Anbei noch ein Beispiel, wie eine Solche in einem Script verwendet werden kann.

PowerShell Beispiel

Um in PowerShell eine Stoppuhr statt Measure-Command zu verwenden, wird die Uhr vor dem eigentlichen Befehl mit Start() gestartet, und nach dem Abarbeiten wieder mit Stop() gestoppt. Danach kann überprüft werden, wie lange der Befehl an Zeit benötigt hat. Elapsed() kann übrigens nur unter der Laufzeit verwendet werden, um die bisherige Dauer anzuzeigen.

In unserem Beispiel lassen wir den Inhalt des System32 Ordner auflisten:

# Objekt instanzieren
$mystopwatch = [system.diagnostics.stopwatch]::StartNew()

# Aufzeichnung starten
$mystopwatch.Start()

# Befehl, der den Inhalt von System32 auflistet
Get-ChildItem 'C:\Windows\System32' -Recurse -Force

# Stoppuhr stoppen
$mystopwatch.Stop()

# Dauer anzeigen
$mystopwatch

An der Ausgabe kann man schön ablesen, dass die Verarbeitung etwas mehr als 21 Sekunden gedauert hat:

IsRunning : False
Elapsed : 00:00:21.4656960
ElapsedMilliseconds : 21465
ElapsedTicks : 214656960
.NET Stopwatch in PowerShell
Johannes
 

sidebar
>