time - PowerShell में कमांड के निष्पादन को समय देना





(6)


Measure-Command प्रयोग करें

उदाहरण

Measure-Command { <your command here> | Out-Host }

Out-Host लिए पाइप आपको कमांड के आउटपुट को देखने की अनुमति देता है, जिसे अन्यथा Measure-Command द्वारा खपत किया जाता है।

क्या PowerShell में कमांड को निष्पादित करने का समय आसान है, जैसे कि लिनक्स में 'टाइम' कमांड?
मैं इसके साथ आया:

$s=Get-Date; .\do_something.ps1 ; $e=Get-Date; ($e - $s).TotalSeconds

लेकिन मुझे कुछ आसान पसंद है

time .\do_something.ps1



स्टॉपवॉच का उपयोग करना और स्वरूपित समय स्वरूपण करना:

Function FormatElapsedTime($ts) 
{
    $elapsedTime = ""

    if ( $ts.Minutes -gt 0 )
    {
        $elapsedTime = [string]::Format( "{0:00} min. {1:00}.{2:00} sec.", $ts.Minutes, $ts.Seconds, $ts.Milliseconds / 10 );
    }
    else
    {
        $elapsedTime = [string]::Format( "{0:00}.{1:00} sec.", $ts.Seconds, $ts.Milliseconds / 10 );
    }

    if ($ts.Hours -eq 0 -and $ts.Minutes -eq 0 -and $ts.Seconds -eq 0)
    {
        $elapsedTime = [string]::Format("{0:00} ms.", $ts.Milliseconds);
    }

    if ($ts.Milliseconds -eq 0)
    {
        $elapsedTime = [string]::Format("{0} ms", $ts.TotalMilliseconds);
    }

    return $elapsedTime
}

Function StepTimeBlock($step, $block) 
{
    Write-Host "`r`n*****"
    Write-Host $step
    Write-Host "`r`n*****"

    $sw = [Diagnostics.Stopwatch]::StartNew()
    &$block
    $sw.Stop()
    $time = $sw.Elapsed

    $formatTime = FormatElapsedTime $time
    Write-Host "`r`n`t=====> $step took $formatTime"
}

उपयोग नमूने

StepTimeBlock ("Publish {0} Reports" -f $Script:ArrayReportsList.Count)  { 
    $Script:ArrayReportsList | % { Publish-Report $WebServiceSSRSRDL $_ $CarpetaReports $CarpetaDataSources $Script:datasourceReport };
}

StepTimeBlock ("My Process")  {  .\do_something.ps1 }



हाँ।

Measure-Command { .\do_something.ps1 }

ध्यान दें कि माप-कमांड का एक मामूली नकारात्मक पक्ष यह है कि आप कोई स्टडआउट आउटपुट नहीं देखते हैं। यदि आप आउटपुट देखना चाहते हैं, तो आप .NET Stopwatch ऑब्जेक्ट का उपयोग कर सकते हैं उदाहरण:

$sw = [Diagnostics.Stopwatch]::StartNew()
.\do_something.ps1
$sw.Stop()
$sw.Elapsed



यहां एक फ़ंक्शन लिखा गया है जो यूनिक्स time कमांड के समान काम करता है:

function time {
    Param(
        [Parameter(Mandatory=$true)]
        [string]$command,
        [switch]$quiet = $false
    )
    $start = Get-Date
    try {
        if ( -not $quiet ) {
            iex $command | Write-Host
        } else {
            iex $command > $null
        }
    } finally {
        $(Get-Date) - $start
    }
}

स्रोत: https://gist.github.com/bender-the-greatest/741f696d965ed9728dc6287bdd336874




साधारण

function time($block) {
    $sw = [Diagnostics.Stopwatch]::StartNew()
    &$block
    $sw.Stop()
    $sw.Elapsed
}

तो के रूप में उपयोग कर सकते हैं

time { .\some_command }

आप आउटपुट को ट्विक करना चाहते हैं




बहुत आसान। Windows में .ps1 फ़ाइल पर राइट क्लिक करें और शैल मेनू में PowerShell के साथ रन पर क्लिक करें।





powershell time