To find out how much time a particular cmdlet or command takes, here's a handy little stopwatch that you can use:
function Test { $codetext = $Args -join ' ' $codetext = $ExecutionContext.InvokeCommand.ExpandString($codetext) $code = [ScriptBlock]::Create($codetext) $timespan = Measure-Command $code "Your code took {0:0.000} seconds to run" -f $timespan.TotalSeconds }
Now, to find out the performance of a particular command, try this:
PS> test Get-Service Your code took 0,004 seconds to run PS> test Get-WmiObject Win32_Service Your code took 0,445 seconds to run
This can be especially useful if you have two cmdlets or parameters that apparently do the same. Performance difference can be tremendous, though:
PS> test dir $home -Include *.ps1 -Recurse Your code took 5,741 seconds to run PS> test dir $home -Filter *.ps1 -Recurse Your code took 0,894 seconds to run
To test drive more complex commands, make sure you place them in quotes.