Bizonyos esetekben fontos lehet a szkriptünk futásának hatékonysága, melynek egyik ismérve, hogy milyen gyorsan fut le. Szerencsére nem kell stopperórával a kezünkben figyelni a konzolt, mert a PowerShell rendelkezik beépített stopperrel, melyet a measure-command cmdlettel tudunk üzembe helyezni.
Például stopperoljuk le, hogy mennyi ideig tart végig listázni a c:\ meghajtó összes alkönyvtárát és fájlját:
[5] PS C:\> Measure-Command {get-childitem c:\ -recurse}
Days : 0
Hours : 0
Minutes : 0
Seconds : 33
Milliseconds : 306
Ticks : 333067130
TotalDays : 0,000385494363425926
TotalHours : 0,00925186472222222
TotalMinutes : 0,555111883333333
TotalSeconds : 33,306713
TotalMilliseconds : 33306,713
Láthatjuk, hogy a measure-command paramétere egy szkriptblokk, kimenete egy timespan típusú objektum, amelyben mindenféle mértékegységben láthatjuk az eltelt időt.
Ha egy szkriptünknél pont az lenne a feladat, hogy ne legyen túl gyors, mert például percenként kellene, hogy valamilyen paramétert kiolvassunk, akkor a start-sleep cmdlettel tudunk várakozni:
[12] PS C:\> get-date; start-sleep 10; get-date
2008. április 24. 22:40:59
2008. április 24. 22:41:09
A fenti példában 10 másodpercet várakoztam, ha rövidebb várakozási időre van szükség, akkor –milliseconds paraméterrel lehet ezt megadni.
A measure-command és a start-sleep kombinálásával lehet olyan ciklust írni, ami például pontosan minden egész percben fut le. Azaz mérhetjük, hogy mennyi ideig tart a futása egy ciklusnak, majd kiegészítésként annyit várunk, hogy a következő perc elején induljon újra a ciklusunk.
Ha utólag vagyunk kíváncsiak egy kifejezés futtatására, akkor azt a get-history cmdlet segítségével lekérdezhetjük. Alaphelyzetben a get-history csak egy előzménylistát mutat:
[14] PS C:\munka> Get-History
Id CommandLine
-- -----------
…
11 Get-Command
12 get-help
13 dir .\
De ha részletesebb nézetre váltunk, akkor már az időadatokat is láthatjuk:
[15] PS C:\munka> Get-History | Format-List
…
Id : 11
CommandLine : Get-Command
ExecutionStatus : Completed
StartExecutionTime : 2010. 01. 12. 19:48:46
EndExecutionTime : 2010. 01. 12. 19:48:50
Id : 12
CommandLine : get-help
ExecutionStatus : Completed
StartExecutionTime : 2010. 01. 12. 19:48:54
EndExecutionTime : 2010. 01. 12. 19:48:54
Id : 13
CommandLine : dir .\
ExecutionStatus : Completed
StartExecutionTime : 2010. 01. 12. 19:48:59
EndExecutionTime : 2010. 01. 12. 19:49:00
Ennek birtokában keressük meg a három leghosszabb ideig futó kifejezést:
[19] PS C:\munka> Get-History | Select-Object -Property id, commandline, @{n =
"Futásidő"; e={$_.EndExecutionTime - $_.StartExecutionTime}} | Sort-Object -Pro
perty Futásidő -Descending | Select-Object -First 3
Id CommandLine Futásidő
-- ----------- --------
11 Get-Command 00:00:04.7500000
15 Get-History | Format-L... 00:00:00.6250000
12 get-help 00:00:00.4062500