Стопор в PowerShell (истечение времени во время выполнения программы) - PullRequest
3 голосов
/ 10 декабря 2011

Моя машина - Win7 64 бит.Я использую PowerShell.

Во время работы gcc или gfortran на моем PowerShell я хотел бы видеть «стопор» (истекшее время) во время выполнения моей программы.Как я могу сделать это в PowerShell?

Мне бы хотелось, чтобы этот секундомер (время истекал) был на оболочке, а не на части моего кода, который я выполняю.

Есть ли какая-нибудь команда?Кто-нибудь даст мне сценарий, который это делает (я новичок).

Ответы [ 4 ]

4 голосов
/ 11 декабря 2011

Если вы хотите, чтобы время постоянно отображалось во время работы скрипта (блока), вы можете сделать что-то вроде следующего:

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 голос
/ 19 октября 2012

Я не уверен, что точно понимаю ваше требование ... Если вы хотите узнать, сколько времени прошло для командлета powershell или сценария ps1, который вы запускаете, вы можете сравнить свойства startexecutiontime и endexecutiontime истории команд.

например. Используйте get-history, чтобы найти команду, которую вы хотите рассчитать, а затем используйте эту

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

или, если вы хотите найти время, истекшее для последней команды, используйте это

get-history -count 1 | % { $_.endexecutiontime - $_.startexecutiontime}
1 голос
/ 12 декабря 2011

Я бы сделал это с помощью командлета Write-Progress:

$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

Надеюсь, это поможет

0 голосов
/ 11 декабря 2011

Похоже, вы хотите, чтобы время процесса. Замените $ исполняемый файл и $ аргумент вашей спецификой. Переменная $ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...