Measure-Command permet de mesurer le temps d’exécution d’un bloc de code PowerShell, de façon simple et efficace. Cependant, cela génère une contrainte:
Measure-Command n’affiche aucun write-output à l’écran!
Il faut alors utiliser par exemple write-host, qui lui envoi le texte directement à la console, et n’est donc pas impacté. Utiliser write-host peut générer des impact:
- Une redirection de la sortie écran vers un fichier ne fonctionnera pas ( > monlog.txt).
- L’ordonnanceur ORSYP ne gère pas bien les sorties faites par Write-host, alors que les write-output ne posent pas de problème
- …
Voici un script pour illustrer le sujet (ou à télécharger ici lotp_test_measure-command):
#******************************************************************************
#
# Titre: lotp_test_measure-command.ps1
#
# Description: test de measure-command
#
# Prérequis: désactiver la signature des scripts PowerShell: Set-ExecutionPolicy remotesigned
#
# Auteur: Mathieu Chateau – LOTP
# mathieu.chateau@lotp.fr
# Version: 0.1
#******************************************************************************
#purge de l’écran
Clear
#Objectif du script: stocker plusieurs valeurs pour chaque ligne du tableau
Write-Output « Test 01: fait un sleep de 2s dans un measure-command«
$temps=Measure-Command { sleep -Seconds 2}
Write-Output « temps d’exécution du test 01: $temps«
Write-Output « ############«
Write-Output « Test 02: fait un write-output dans un measure-command«
$temps=Measure-Command {Write-Output « ce message est supprimé par measure-command, vous ne le verrez pas« }
Write-Output « le message n’est pas apparu mais la commande est exécutée quand même«
Write-Output « temps d’exécution du test 02: $temps«
Write-Output « ############«
Write-Output « Test 03: fait un write-host dans un measure-command«
$temps=Measure-Command {Write-host « ce message est envoyé à la console, vous le voyez même dans un measure-command« }
Write-Output « temps d’exécution du test 03: $temps«