我的机器是Win7 64位。我使用PowerShell。
在我的PowerShell上运行gcc或gfortran时,我希望在程序执行期间看到一个“塞子”(时间已过)。我怎么能在PowerShell中做到这一点?
我希望这个秒表(时间流逝)将在shell上,而不是我正在运行的代码的一部分。
有没有命令?有人给我一个脚本(我是新手)。
答案 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