Quand vous  avez des scripts PowerShell qui demandent un certains temps d’exécution, vous avez besoin d’avoir une estimation précise pour planifier une exécution.

Measure-Command est la commande la plus simple.

PS C:>Measure-Command { .monScript.ps1 }

Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 257
Ticks : 2576708
TotalDays : 2,98230092592593E-06
TotalHours : 7,15752222222222E-05
TotalMinutes : 0,00429451333333333
TotalSeconds : 0,2576708
TotalMilliseconds : 257,6708

Le désavantage de cette commande est que vous ne voyez plus la sortie standard à moins d’utiliser l’astuce suivante.

#Afficher l'exécution
PS C:> Measure-Command { .monScript.ps1 | Out-Default }

#Loguer l'éxécution
PS C:> Start-Transcript ts-monScript.txt
PS C:> Measure-Command { .monScript.ps1 | Out-Default }
PS C:> Stop-Transcript

Vous en conviendrez, Measure-Command n’est plus vraiment adaptée. Pour être simple et efficace, vous préfèrerez l’objet .net Stopwatch.

Start-Transcript ts-monScript.txt
$sw = [Diagnostics.Stopwatch]::StartNew()
#contenu de monScript.ps1
$sw.Stop()
$sw.Elapsed
Stop-Transcript

Vous avez maintenant la possibilité de créer simplement des scripts dont toute l’exécution est tracée et minutée.

Références:

Using the Measure-Command Cmdlet

Stopwatch (msdn)

Start-Transcript/Stop-Transcript