Measure-Time

Une question StackOverflow était la suivante: Comment peut-on faire pour avoir l’équivalent de la commande time de Linux/Unix sur Windows à travers Powershell.

Cette commande permet de savoir le temps que passe une expression ou une autre commande en mode User et mode System. Dans le monde Windows le mode System est le mode Kernel, pendant lequel, si une erreur se produit, la machine fait un crash dump (le fameux blue screen of death).

La première réaction est bien sûr d’utiliser la cmdlet Measure-Command, qui permet mésurer le temps qu’une commande utilise pour s’exécuter.

Or Measure-Time ne mesure pas plus en détail le temps Kernel versus le temps User: ça ne donne que l’elapsed time.

Du coup nous allons créer notre propre cmdlet pour simuler cette commande time.

On appellera cette cmdlet Measure-Time.

La cmdlet utilise du C# pour importer la fonction GetProcessTimes depuis Kernel32.DLL. Elle va également démarrer un process avec la commande passée en paramètre, et une fois le process terminé elle pourra à travers GetProcessTimes mesurer les temps passés en mode Kernel, User et l’elapsed time.

J’ai ajouté un switch appelé -Silent qui permet de cacher le output généré par la commande.

Partager ce contenu