PowerShell中的等效时间命令

问题描述 投票:5回答:3

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

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

  1. 它将打开新的PowerShell窗口。
  2. 它将执行命令。
  3. 它将关闭PowerShell窗口。
  4. 它将使用GetProcessTimes function函数获得不同的执行时间。

Unix中的“时间命令”也是以同样的方式计算的吗?

unix powershell
3个回答
13
投票

Measure-Command cmdlet是你的朋友。

PS> Measure-Command -Expression {dir}

您还可以从命令历史记录(此示例中的上一次执行命令)获取执行时间:

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

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


1
投票

如果你需要测量某些东西的时间,你可以关注this blog entry

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

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

# The code you measure

$sw.Stop()
Write-Host $sw.Elapsed
© www.soinside.com 2019 - 2024. All rights reserved.