Tags: PowerShell, Performance
Will man zum Beispiel die Dauer einer bestimmten Operation messen oder eine Aktion nach Überschreiten eines Zeitlimits ausführen, dann kann man dafür eine Stoppuhr in PowerShell nutzen. Das entsprechende Objekt umfasst die nötigen Methoden, um die Uhr zu starten, zurückzusetzen oder anzuhalten.
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
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.
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
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
Ähnliche Beiträge
Weitere Links