PS 7.x多进度活动下Write-Progress失效问题求助
问题原因与修复方案
这不是BUG,是PowerShell 7.x对Write-Progress的行为做了优化调整。7.x版本默认会对进度输出做合并和节流处理,当第一个进度活动标记为-Completed后,后续未指定唯一标识的新进度活动可能无法正确触发显示。
修复方法很简单:给每个独立的进度活动分配唯一的-Id参数,让PowerShell能明确区分不同的进度任务。修改后的脚本如下:
$numOps = 40 $progressPerOp = 100 / $numOps # 100/total number of operations $progressOpsComplete = 0 # 第一个进度活动,指定Id为0 for ($i = 1; $i -le $numOps; $i++) { $percent = $progressPerOp * $progressOpsComplete Write-Progress -Id 0 -Activity "testing progress indicator" -Status "Processing...$percent%" -PercentComplete ($progressPerOp * $progressOpsComplete) Start-Sleep -Milliseconds 50 $progressOpsComplete++ } $percent = $progressPerOp * $progressOpsComplete Write-Progress -Id 0 -Activity "testing progress indicator" -Status "Processing...$percent%" -PercentComplete ($progressPerOp * $progressOpsComplete) Write-Progress -Id 0 -Activity "testing progress indicator" -Completed write-host "`$progressPerOp:$progressPerOp `$progressOpsComplete:$progressOpsComplete" # 第二个进度活动,指定Id为1 Write-Progress -Id 1 -Activity "waiting 10 seconds" -Status "waiting" sleep 6 Write-Progress -Id 1 -Activity "waiting 10 seconds" -Completed
原理是:-Id参数用于标识不同的进度活动实例,PowerShell会为每个Id维护独立的进度状态,避免因前一个活动完成后导致后续无Id的进度被忽略。
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

