Powershell : Timer Function/Measure Elapsed command time
Hi all,
- Synopsis:
I wanted to introduce a function that I used in my daily work .
This function permit to reply to the following question :
" I want to know : How many time is required to enumerate my folder tree on my File Server"
So the first answer is, which basic PowerShell command enumerate a folder tree?
Get-ChildItem -directory -recurse
I used Stopwatch in my code cause this is inherited from .NET and by logic more robusts and efficients than the classic measure-command CmdLet.
- Quick Help
The "$SW" variable control the timer execution (StartNew,Stop,ElapsedTime) full methods availables are here :
https://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch_methods(v=vs.110).aspx
The command used in my test is ran by the "$Block" variable you can replace this command by any command or scriptblock.
Some usage examples can be found here :
http://www.ilovepowershell.com/powershell-create-stopwatch-alarm-object/
The full code is available below:
function Watch-TimeElapsed {
# Start Time command
$sw = [Diagnostics.Stopwatch]::StartNew()
# Place here the scriptblock you want to measure
$block = gci -recurse -directory -errorAction SilentlyContinue -ErrorVAriable +Global:StrError
# Stop Time
$sw.Stop()
# Store Elapsed time into desired vars
$ms = $sw.Elapsed.Milliseconds
$min = $sw.Elapsed.Minutes
$hours = $sw.Elapsed.Hours
$MeasureItem = $block.Count
# Display timer statistics to host
Write-Host "Total elapsed time in minutes: $min , in hours : $hours and milliseconds : $ms for a number of : $MeasureItem items" -ForegroundColor:Green
If ($strerror)
{
$ErrorCount = ($strerror).Count
Write-Warning "Error Variable contains some errors : $errorCount"
Write-Warning 'Use the following command to parse errors: "$strerror.Message.Exception"'
}
Else {
Write-Warning "End of process without errors"
}
}