PowerShell: Measure-Command et Write-Output
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“
Merci pour l’info.