Stoppuhr mit PowerShell einrichten


    Tags: ,

    StoppuhrWill man zum Beispiel die Dauer einer bestimmten Opera­tion messen oder eine Aktion nach Über­schreiten eines Zeit­limits aus­führen, dann kann man dafür eine Stopp­uhr in PowerShell nutzen. Das ent­sprechende Objekt umfasst die nötigen Methoden, um die Uhr zu starten, zurück­zusetzen oder anzu­halten.

    Genau genommen bietet PowerShell nicht selbst ein Cmdlet oder eine Funktion, um eine Stoppuhr zu erzeugen. Vielmehr muss man dafür die .NET-Klasse System.Diagnostics.Stopwatch instanziieren. Dies lässt sich über den Befehl

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

    erreichen.

    Sobald das Objekt existiert, kann man wie gewohnt mit Hilfe von Get-Member abfragen, welche Eigenschaften und Methoden es bietet:

    $stoppuhr | Get-Member

    Get-Member zeigt die Methoden zur Steuerung der Stoppuhr an.

    Verstrichene Zeit anzeigen

    Über das Attribut Elapsed kann man jederzeit herausfinden, wie viel Zeit seit dem Start des Timers verstrichen ist. Über IsRunning erfährt man, ob die Uhr aktuell läuft. Falls einem die vergangene Zeit im Format hh:mm:ss.ms ausreicht, dann erhält man die Werte für beide Eigenschaften, indem man einfach die Variable aufruft.

    Über die Eigenschaft Elapsed erfährt man, wie viel Zeit seit dem Start der Stoppuhr verstrichen ist.

    Methoden zur Steuerung der Stoppuhr

    Zur Steuerung der Stoppuhr gibt es die Methoden Start(), Stop(), Reset() und Restart(). Die ersten beiden sind eigentlich selbsterklärend. Zu erwähnen wäre nur, dass ein Start() nach dem Erzeugen des stopwatch-Objekts nicht erforderlich ist, weil die Uhr sofort zu ticken beginnt. Die Methode braucht man also nur, um nach einem Stop() wieder fortzufahren.

    Reset() und Restart() tun im Prinzip dasselbe, indem sie die Stoppuhr wieder auf null zurücksetzen. Der Unterschied zwischen ihnen besteht darin, dass die Uhr nach Restart() sofort wieder weiterläuft, bei Reset() jedoch stehen bleibt, bis man sie mit Start() erneut in Gang setzt.

    Ein kleines Script, um die Ausführungsdauer eines Programms zu stoppen, könnte etwa so aussehen:

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

    [Befehl, der gemessen werden soll]

    $stoppuhr.stop()
    $stoppuhr

    In die Aufrufe der Stoppuhr-Methoden ist die Ausführung von robocopy eingebettet. Es zeigt die gleiche Dauer an wie die Stoppuhr

    Der obige Screenshot zeigt die Anwendung für einen Kopiergang mit robocopy. Dafür wäre die PowerShell-Stoppuhr nicht erforderlich, weil robocopy selbst die verflossene Zeit anzeigt. Es ist aber interessant zu sehen, dass beide Werte für die Dauer der Aktion identisch sind.

    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 //

    Ähnliche Beiträge

    Weitere Links