PowerShell中的Stopper(执行程序期间经过的时间)

时间:2011-12-10 15:25:13

标签: powershell

我的机器是Win7 64位。我使用PowerShell。

在我的PowerShell上运行gcc或gfortran时,我希望在程序执行期间看到一个“塞子”(时间已过)。我怎么能在PowerShell中做到这一点?

我希望这个秒表(时间流逝)将在shell上,而不是我正在运行的代码的一部分。

有没有命令?有人给我一个脚本(我是新手)。

4 个答案:

答案 0 :(得分:4)

如果您希望在脚本(块)运行时不断显示时间,您可以执行以下操作:

function timer($script, $interval = 1){
    $t = [system.diagnostics.stopwatch]::startnew()
    $job = start-job -script $script
    while($job.state -eq "running"){
        write-host -fore yellow "Elapsed: $($t.elapsed) "
        $job | Receive-Job
        sleep $interval
    }
    $t.stop()
}

timer -script {1..10 | %{ write-host $_ test; start-sleep 2}}

答案 1 :(得分:1)

我会使用Write-Progress cmdlet执行此操作:

$start = Get-Date
$j = Start-Job -ScriptBlock {...}
do {
    Write-Progress "Waiting for Job to Finish" "Waiting For $((Get-Date) - $start)"
    Start-Sleep -milliseconds 250
} while ($j.State -eq 'Running')
Receive-Job -Job $j

希望这有助于

答案 2 :(得分:1)

我不确定我是否完全了解您的要求...如果您想查找运行的PowerShell cmdlet或ps1脚本所用的时间,您可以比较命令历史记录的startexecutiontime和endexecutiontime属性。

e.g。使用get-history查找要计时的命令,然后使用此

Get-history -ID 123 | % { $_.endexecutiontime - $_.startexecutiontime}

或者如果您想查找最后一个命令的时间,请使用此

get-history -count 1 | % { $_.endexecutiontime - $_.startexecutiontime}

答案 3 :(得分:0)

听起来你想要为一个过程计时。用您的细节替换$ executable和$ argument。 $ timeSpan变量将为您提供完成所需的时间。

$executable = "C:\Windows\notepad.exe"
$arguments = "C:\Windows\WindowsUpdate.log"

$timeSpan = Measure-Command { Start-Process -FilePath $executable -ArgumentList $arguments -Wait -NoNewWindow }

$timeSpan

输出:

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 24
Milliseconds      : 255
Ticks             : 242559320
TotalDays         : 0.000280739953703704
TotalHours        : 0.00673775888888889
TotalMinutes      : 0.404265533333333
TotalSeconds      : 24.255932
TotalMilliseconds : 24255.932