programing

PowerShell에 경과 시간 표시

telecom 2023. 10. 2. 10:58
반응형

PowerShell에 경과 시간 표시

이벤트를 시작하고 사용자가 스크립트 실행을 중지하기 위해 아무 키나 누를 때까지 기다리는 스크립트가 있습니다.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;
    }
}

이것은 내가 추구했던 결과물을 나에게 주었습니다 :)

$StartTime = $(get-date)

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

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

Powershell에서 경과된 시간 측정(보관된 복사본) 기사에서:

그 변수가 다음과 같이$script:StartTime스크립트를 시작할 때 설정되었으며 경과 시간은 다음 방법 중 하나를 사용하여 확인할 수 있습니다.

$elapsedTime = new-timespan $script:StartTime $(get-date)

아니면

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

두 방법 모두 정확히 동일하게 작동하며 다음을 생성합니다.System.TimeSpan물건.

따라서 위의 예를 사용하여 다음과 같이 설정할 수 있습니다.$script:StartTimeRead-Host 및 호출 전에$elapsedTime = $(get-date) - $script:StartTime끝나고.

타이머 클래스(RIP posthips)를 사용하면 다음과 같은 것을 얻을 수 있습니다.

$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는 이벤트/부울린(키 누름 기능 등)입니다.

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} 
}

TLDR 답변

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

대부분의 경우$elapsedTime.TotalSeconds아니면$elapsedTime.TotalMilliseconds당신이 원하는 겁니다

언급URL : https://stackoverflow.com/questions/10941756/powershell-show-elapsed-time

반응형