2013-11-14 3 views
3

Не могли бы вы рассказать мне поток выполнения команды времени в деталях.Эквивалент команды времени в powershell

У меня есть пользовательская функция в powershell, которая будет вычислять время для выполнения команды следующим образом. 1. Он откроет новое окно PowerShell. 2. Он выполнит команду. 4. Он закроет окно powershell. 3. Он получит различные времена выполнения, используя функцию GetProcessTimes. URL-адрес: http://msdn.microsoft.com/en-us/library/windows/desktop/ms683223(v=vs.85).aspx

Я хочу знать, вычисляет ли команда времени в unix так же.

Thanks in adavnce.

ответ

9

Командлет Measure-Command - ваш друг.

PS> Measure-Command -Expression {dir} 

Вы также могли бы получить время выполнения из истории команд (последняя введённая команда в этом примере):

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

Чтобы использовать stdout, используйте '| Out-Default', поэтому 'Measure-Command -Expression {dir | Out-Default} ' – KCD

1

Если вам нужно измерить время, затраченное на Somthing, вы можете следовать этой blog entry.

В принципе, предлагаем использовать .Net StopWatch class

$sw = [system.diagnostics.stopwatch]::startNew() 

# the code you measure 

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

Я должен признать, что ответ @shayLevy намного лучше моего. –

2

Я делал это:

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)

Смежные вопросы