我正在使用以下脚本测量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)
因此,我该怎么做?
另外,进度蓝屏,我希望它在经过的时间完成后消失...但是它仍保留在控制台上并停留在那儿。一旦消失,我如何使它消失?