PowerShell显示运行时间

lsmd5eda  于 2023-03-12  发布在  Shell
关注(0)|答案(5)|浏览(341)

我有一个脚本,它会启动一个事件,然后等待用户按任意键来停止脚本的执行。我试图找到一种方法来显示一个计时器(脚本已经运行了多长时间),同时等待用户在Read-Host上的输入。有什么方法可以实现这一点吗?
这个管用

$Time = [System.Diagnostics.Stopwatch]::StartNew()
while ($true) {
    $CurrentTime = $Time.Elapsed
    write-host $([string]::Format("`rTime: {0:d2}:{1:d2}:{2:d2}",
                                  $CurrentTime.hours,
                                  $CurrentTime.minutes,
                                  $CurrentTime.seconds)) -nonewline
    sleep 1
    if ($Host.UI.RawUI.KeyAvailable -and ("q" -eq $Host.UI.RawUI.ReadKey("IncludeKeyUp,NoEcho").Character)) {
        Write-Host "Exiting now"
        break;
    }
}
nuypyhwy

nuypyhwy1#

这给了我所追求的输出:)

$StartTime = $(get-date)

$elapsedTime = $(get-date) - $StartTime

$totalTime = "{0:HH:mm:ss}" -f ([datetime]$elapsedTime.Ticks)
sdnqo3pr

sdnqo3pr2#

来自文章Measuring Elapsed Time in Powershellarchived copy):
假设变量$script:StartTime在脚本开始时设置,则可以使用以下方法之一确定经过的时间:
$elapsedTime = new-timespan $script:StartTime $(get-date)

$elapsedTime = $(get-date) - $script:StartTime
这两种方法的工作原理完全相同,都生成一个System.TimeSpan对象。
因此,使用上面的示例,您可以在Read-Host之前设置$script:StartTime,然后调用$elapsedTime = $(get-date) - $script:StartTime

ukdjmx9f

ukdjmx9f3#

使用一个计时器类(RIP poshtips),我得到了如下的结果:

$Time = [System.Diagnostics.Stopwatch]::StartNew()
while ($NoEvent) {
    $CurrentTime = $Time.Elapsed
    write-host $([string]::Format("`rTime: {0:d2}:{1:d2}:{2:d2}",
                                  $CurrentTime.hours,
                                  $CurrentTime.minutes,
                                  $CurrentTime.seconds)) -nonewline
    sleep 1

    #Handle event
    if(event){$NoEvent = false}
}

其中,$NoEvent是事件/布尔值(按键func等)。

7ajki6be

7ajki6be4#

我很高兴这个小函数是从Xelco52的答案扩展而来的

$startTime = $(get-date)
write-host "Elapsed:00:00:00"
$NoEvent = $true
While ($NoEvent)
{
  Start-Sleep 1
  $elapsedTime = new-timespan $startTime $(get-date)
  write-host "Elapsed:$($elapsedTime.ToString("hh\:mm\:ss"))"  

  #Handle event
  if(event){$NoEvent = $false} 
}
lztngnrs

lztngnrs5#

TLDR答案

$StartTime = $(get-date)
#...do something...
$elapsedTime = $(get-date) - $StartTime

大多数时候$elapsedTime.TotalSeconds$elapsedTime.TotalMilliseconds是你想要的。

相关问题