Как измерить процент выполнения на основе того, когда есть выходной файл? - PullRequest
1 голос
/ 07 июня 2019

Я измеряю истекшее время командлета Invoke-ASCmd с помощью следующего сценария:

$elapsedTime = [system.diagnostics.stopwatch]::StartNew()
$j = Start-Job -Arg $XMLF, $Server, $output_file -ScriptBlock {
    Param($XMLF, $Server, $output_file)
    Invoke-ASCmd –InputFile $XMLF -Server "$Server" >$output_file
}
do {
    write-progress -activity "Syncing..." -status "$($elapsedTime.Elapsed.ToString())" -percentcomplete ([Math]::Min(100*($elapsedTime.Elapsed.Seconds / 20),100));
    -Milliseconds 250
} while ($j.State -eq 'Running')
Receive-Job -Job $j

$elapsedTime.stop()

, поскольку не существует «прямого» способа измерить, насколько далеко продвинулся процесс до 100%, я »подделывая это".Поскольку для базы данных, на которой я тестирую, требуется около 20 секунд, я просто выполняю некоторые вычисления, используя время от 0 до 20 в качестве от 0 до 100:

[Math]::Min(100*($elapsedTime.Elapsed.Seconds / 20),100)

Однако это не так.всегда будет 20. поэтому я не могу жестко закодировать это значение, особенно у меня есть около 30 баз данных, которые различаются по размеру и, следовательно, по продолжительности.

как таковой, я думаю, что нет способа измерить командлет Inovke-ASCmd, может быть, я могу каким-то образом измерить до истекшего времени или до времени, когда файл выводится с тех пор, когда онуказывает на конец команды, я думаю.

Хотя, я не знаю, будет ли это возможно, потому что технически ему придется каким-то образом знать будущее, когда он закончится или когда файл будет выведен, потому что для этого нужно заранее указать значение

что-то вроде динамического значения:

[Math]::Min(100*($elapsedTime.Elapsed.Seconds / $DynamicValue),100)

Следовательно, как я могу это сделать?

также, синий экран прогресса, я ожидаю, что он исчезнет по истечении истекшего времени ... но он сохраняется на консоли и остается там.как я могу заставить его исчезнуть после того, как он закончился?

related: Почему команда в ScriptBlock не работает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...