如何根据何时有输出文件来衡量完成百分比?

时间:2019-06-07 02:26:52

标签: powershell

我正在使用以下脚本测量Invoke-ASCmd cmdlet的运行时间:

$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 cmdlet,也许我可以以某种方式测量经过的时间,或者直到输出文件的时间,因为那表示结束我认为的命令。

虽然,我不知道这是否可能,因为从技术上讲,它必须以某种方式知道将来何时完成或何时输出文件,因为它需要事先在其中保存值

类似于动态值:

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

因此,我该怎么做?

另外,进度蓝屏,我希望它在经过的时间完成后消失...但是它仍保留在控制台上并停留在那儿。一旦消失,我如何使它消失?

相关:Why is the command in ScriptBlock not working?

0 个答案:

没有答案