How to measure elapsed time of command line tools using PowerShell
Date Published: 05 April 2021
I'm using the command line to run build scripts and other tasks more and more, especially now that .NET Core / .NET 5 has the dotnet
CLI and things like docker
and docker-compose
are in heavy use. When you're running a single command, like dotnet build
or dotnet test
it usually tells you about how long it took to run. But when you have a scripted build that involves multiple steps, it's often nice to be able to see how long the whole thing took. Especially if you're trying to optimize it and/or see how it compares on different machines.
That's where PowerShell's Measure-Command
command comes in. There's a good overview of it here, but for my purposes I'll elaborate below.
First, you can wrap Measure-Command
around an arbitrary script file, which is what many examples show, like this:
Measure-Command { ./SomeScript.ps1 }
This will run the enclosed script and provide a report on how long it took (in many different units). You can also run arbitrary CLI commdands (like dotnet build
shown below):
But notice you don't get any output from the command you run. Using a tip from the Stack Overflow answer I linked above, the way to measure the script and see its output is to pipe the output to another commandlet that will write to the host.
Measure-Command { dotnet build | Out-Default}
With this combination, you can see both the output of the script or command being measured as well as the results. If you want to compare two (or more) runs, be sure to use the TotalUnits such as TotalMilliseconds since the Days|Hours|Minutes|Seconds|Millseconds
units are all just individual pieces of the full time elapsed.
Category - Browse all categories
About Ardalis
Software Architect
Steve is an experienced software architect and trainer, focusing on code quality and Domain-Driven Design with .NET.