Write-Progress
在 PowerShell 命令窗口中显示一个进度栏。
语法
Write-Progress
[-Activity] <String>
[[-Status] <String>]
[[-Id] <Int32>]
[-PercentComplete <Int32>]
[-SecondsRemaining <Int32>]
[-CurrentOperation <String>]
[-ParentId <Int32>]
[-Completed]
[-SourceId <Int32>]
[<CommonParameters>]
说明
Write-Progress
cmdlet 在 PowerShell 命令窗口中显示一个进度栏,以描述运行中的命令或脚本的状态。 你可以选择进度栏反映的指示器,以及显示在进度栏上方和下方的文本。
示例
示例 1:显示 For 循环的进度
for ($i = 1; $i -le 100; $i++ ) {
Write-Progress -Activity "Search in Progress" -Status "$i% Complete:" -PercentComplete $i
Start-Sleep -Milliseconds 250
}
此命令将显示一个从 1 数到 100 的 for
循环的进度。
Write-Progress
cmdlet 包括一个状态栏标题 Activity
、一个状态行和指示该任务的相对完成程度的变量 $i
(for
循环中的计数器)。
示例 2:显示嵌套 For 循环的进度
for($I = 0; $I -lt 10; $I++ ) {
$OuterLoopProgressParameters = @{
Activity = 'Updating'
Status = 'Progress->'
PercentComplete = $I * 10
CurrentOperation = 'OuterLoop'
}
Write-Progress @OuterLoopProgressParameters
for($j = 1; $j -lt 101; $j++ ) {
$InnerLoopProgressParameters = @{
ID = 1
Activity = 'Updating'
Status = 'Progress'
PercentComplete = $j
CurrentOperation = 'InnerLoop'
}
Write-Progress @InnerLoopProgressParameters
Start-Sleep -Milliseconds 25
}
}
Updating
Progress ->
[ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo]
OuterLoop
Updating
Progress
[oooooooooooooooooo ]
InnerLoop
本示例显示两个嵌套的 For 循环的进度,每个循环由一个进度栏表示。
第二个进度栏的 Write-Progress
命令包括用于将其与第一个进度栏进行区分的 Id 参数。
如果不使用 Id 参数,则这些进度栏将会互相重叠,而不会以垂直排列方式显示。
示例 3:在搜索字符串时显示进度
# Use Get-EventLog to get the events in the System log and store them in the $Events variable.
$Events = Get-EventLog -LogName system
# Pipe the events to the ForEach-Object cmdlet.
$Events | ForEach-Object -Begin {
# In the Begin block, use Clear-Host to clear the screen.
Clear-Host
# Set the $i counter variable to zero.
$i = 0
# Set the $out variable to an empty string.
$out = ""
} -Process {
# In the Process script block search the message property of each incoming object for "bios".
if($_.message -like "*bios*")
{
# Append the matching message to the out variable.
$out=$out + $_.Message
}
# Increment the $i counter variable which is used to create the progress bar.
$i = $i+1
# Determine the completion percentage
$Completed = ($i/$Events.count) * 100
# Use Write-Progress to output a progress bar.
# The Activity and Status parameters create the first and second lines of the progress bar
# heading, respectively.
Write-Progress -Activity "Searching Events" -Status "Progress:" -PercentComplete $Completed
} -End {
# Display the matching messages using the out variable.
$out
}
此命令将显示一个用于在系统事件日志中查找字符串“bios”的命令的进度。
PercentComplete 参数值的计算方法是:将已处理的事件数 $i
除以检索到的事件总数 $Events.count
,然后再将结果乘以 100。
示例 4:显示嵌套进程的每个级别的进度
foreach ( $i in 1..10 ) {
Write-Progress -Id 0 "Step $i"
foreach ( $j in 1..10 ) {
Write-Progress -Id 1 -ParentId 0 "Step $i - Substep $j"
foreach ( $k in 1..10 ) {
Write-Progress -Id 2 -ParentId 1 "Step $i - Substep $j - iteration $k"
Start-Sleep -Milliseconds 150
}
}
}
Step 1
Processing
Step 1 - Substep 2
Processing
Step 1 - Substep 2 - Iteration 3
Processing
在此示例中,可以使用 ParentId 参数使输出缩进,以在每个步骤的进度中显示父子关系。
参数
-Activity
指定状态栏上方标题中的第一行文本。 此文本描述要报告进度的活动。
类型: | String |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-Completed
指示进度栏是否可见。 如果省略此参数,则 Write-Progress
会显示进度信息。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-CurrentOperation
指定进度栏下方的文本行。 此文本描述当前正在进行的操作。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Id
指定用于区分各个进度栏的 ID。 在单个命令中创建多个进度栏时,请使用此参数。 如果这些进度栏不具有不同的 ID,则它们会重叠起来,而不是连续地显示。 不允许负值。
类型: | Int32 |
Position: | 2 |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-ParentId
指定当前活动的父活动。 如果当前活动没有父活动,请使用值 -1
。
类型: | Int32 |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-PercentComplete
指定已完成活动所占的百分比。 如果完成百分比未知或不适用,请使用值 -1
。
类型: | Int32 |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-SecondsRemaining
指定预计的在完成活动之前剩余的秒数。 如果剩余秒数未知或不适用,请使用值 -1
。
类型: | Int32 |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-SourceId
指定记录的来源。 可以用此项代替 Id,但不能将其与其他参数一起使用,例如 ParentId。
类型: | Int32 |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Status
指定状态栏上方标题中的第二行文本。 此文本描述活动的当前状态。
类型: | String |
Position: | 1 |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
输入
None
不能通过管道将对象传递给此 cmdlet。
输出
None
此 cmdlet 不返回任何输出。
备注
如果没有显示进度栏,请检查 $ProgressPreference
变量的值。 如果该值设置为 SilentlyContinue
,则不会显示进度栏。 有关 PowerShell 首选项的详细信息,请参阅 about_Preference_Variables。
cmdlet 的参数对应于 System.Management.Automation.ProgressRecord 类的属性。 有关详细信息,请参阅 ProgressRecord 类。