Mesurer la durée d'exécution d'un script PowerShell

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