PowerShell – Script Timer

| |

There are a few methods for this but my preference is below.

<#
.SYNOPSIS
    Functions to calculate the time it takes to run a script
.DESCRIPTION
    This script contains functions that will calculate the time it takes to run a given script in hours, minutes, seconds and milliseconds
.Example
    .".\Functions\ScriptTimer.ps1"
    $ScriptTimerStartTime = Start-ScriptTimer
    Get-Process | Format-Table -AutoSize
    Stop-ScriptTimer $ScriptTimerStartTime
#>


function Start-ScriptTimer
{
    $ScriptTimerStartTime = $(get-date)
    return $ScriptTimerStartTime
}

function Format-TimeSpan
{
    PARAM (
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [TimeSpan]$TimeSpan
    )

    #Current implementation doesn't handle days.

    #By including the delimiters in the formatting string it's easier when we concatenate in the end
    $hours = $TimeSpan.Hours.ToString("00")
    $minutes = $TimeSpan.Minutes.ToString("\00")
    $seconds = $TimeSpan.Seconds.ToString("\00")
    $milliseconds = $TimeSpan.Milliseconds.ToString("\000")

    Write-Output ($hours + " hours " + $minutes + " minutes " + $seconds + " seconds " + $milliseconds + " milliseconds")
}

function Stop-ScriptTimer ([DateTime] $ScriptTimerStartTime)
{
    $ScriptTimerElapsedTime = $(get-date) - $ScriptTimerStartTime
    $ScriptTimerTotalTime = Format-TimeSpan $ScriptTimerElapsedTime.Ticks
    Write-Output "Script completed in $ScriptTimerTotalTime" | Out-String
}

<#
$ScriptTimerStartTime = Start-ScriptTimer
Get-Process | Format-Table -AutoSize # What ever you want to time would go here.
Stop-ScriptTimer $ScriptTimerStartTime
#>
All information on this site is shared with the intention to help. Before any source code or program is ran on a production (non-development) system it is suggested you test it and fully understand what it is doing not just what it appears it is doing. I accept no responsibility for any damage you may do with this code.