PowerShell 技能连载 - 进度条技巧(第 2 部分)

内置的 PowerShell 进度条支持“真实”的进度指示器,只要您提交一个在 0 到 100 范围内的“percentCompleted”值:

1
2
3
4
5
6
0..100 | ForEach-Object {
$message = '{0:p0} done' -f ($_/100)
Write-Progress -Activity 'I am busy' -Status $message -PercentComplete $_

Start-Sleep -Milliseconds 100
}

为了显示一个“真实”的进度指示器,因此您的脚本需要“知道”已经处理了多少给定任务。

以下是一个修改后的示例,它定义了需要处理多少个任务,然后从中计算出完成百分比:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$data = Get-Service  # for illustration, let's assume you want to process all services

$counter = 0
$maximum = $data.Count # number of items to be processed

$data | ForEach-Object {
# increment counter
$counter++
$percentCompleted = $counter * 100 / $maximum
$message = '{0:p1} done, processing {1}' -f ($percentCompleted/100), $_.DisplayName
Write-Progress -Activity 'I am busy' -Status $message -PercentComplete $percentCompleted

Write-Host $message
Start-Sleep -Milliseconds 100
}

PowerShell 技能连载 - 进度条技巧(第 2 部分)

http://blog.vichamp.com/2023/05/13/progress-bar-tricks-part-2/

作者

吴波

发布于

2023-05-13

更新于

2023-05-22

许可协议

评论