PowerShell中的等效时间命令

时间:2013-11-14 11:06:07

标签: unix powershell

详细说明时间命令的执行流程是什么?

我在PowerShell中有一个用户创建的函数,它将按以下方式计算执行命令的时间。

  1. 它将打开新的PowerShell窗口。
  2. 它将执行命令。
  3. 它将关闭PowerShell窗口。
  4. 使用GetProcessTimes function函数获取不同的执行时间。
  5. Unix中的“time command”也是以同样的方式计算的吗?

3 个答案:

答案 0 :(得分:13)

Measure-Command cmdlet是您的朋友。

PS> Measure-Command -Expression {dir}

您还可以从命令历史记录中获取执行时间(本例中最后执行的命令):

$h = Get-History -Count 1
$h.EndExecutionTime - $h.StartExecutionTime

答案 1 :(得分:4)

我一直这样做:

Time {npm --version ; node --version}

使用此功能,您可以将其放在$profile文件中:

function Time([scriptblock]$scriptblock, $name)
{
    <#
        .SYNOPSIS
            Run the given scriptblock, and say how long it took at the end.

        .DESCRIPTION

        .PARAMETER scriptBlock
            A single computer name or an array of computer names. You mayalso provide IP addresses.

        .PARAMETER name
            Use this for long scriptBlocks to avoid quoting the entire script block in the final output line

        .EXAMPLE
            time { ls -recurse}

        .EXAMPLE
            time { ls -recurse} "All the things"
    #>

    if (!$stopWatch)
    {
        $script:stopWatch = new-object System.Diagnostics.StopWatch
    }
    $stopWatch.Reset()
    $stopWatch.Start()
    . $scriptblock
    $stopWatch.Stop()
    if ($name -eq $null) {
        $name = "$scriptblock"
    }
    "Execution time: $($stopWatch.ElapsedMilliseconds) ms for $name"
}

Measure-Command可以工作,但它会吞下正在运行的命令的标准输出。 (另见 Timing a command's execution in PowerShell

答案 2 :(得分:1)

如果您需要衡量某事物所花费的时间,可以按照this blog entry

基本上,它建议使用.NET StopWatch class

$sw = [System.Diagnostics.StopWatch]::startNew()

# The code you measure

$sw.Stop()
Write-Host $sw.Elapsed