Stopperoljuk a futási időt és várakozzunk (measure-command, start-sleep, get-history)

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



Word To HTML Converter