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 = 1; $I -lt 101; $I++ )
{
Write-Progress -Activity Updating -Status 'Progress->' -PercentComplete $I -CurrentOperation OuterLoop
for($j = 1; $j -lt 101; $j++ )
{
Write-Progress -Id 1 -Activity Updating -Status 'Progress' -PercentComplete $j -CurrentOperation InnerLoop
}
}
Updating
Progress ->
[ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo]
OuterLoop
Updating
Progress
[oooooooooooooooooo ]
InnerLoop
此示例显示两个嵌套 For 循环的进度,每个循环由进度栏表示。
第二个进度栏的 Write-Progress
命令包括 ID 参数,该参数将其与第一个进度栏区区分开来。
如果没有 ID 参数,进度栏将相互叠加,而不是显示在另一个下方。
示例 3:在搜索字符串时显示进度
# Use Get-WinEvent to get the events in the System log and store them in the $Events variable.
$Events = Get-WinEvent -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 a 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
# 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 ($i/$Events.count*100)
} -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 -m 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
Write-Progress
不生成任何输出。
备注
如果未显示进度栏,请检查 $ProgressPreference
变量的值。 如果该值设置为 SilentlyContinue,则不会显示进度栏。 有关 PowerShell 首选项的详细信息,请参阅 about_Preference_Variables。
cmdlet 的参数对应于 System.Management.Automation.ProgressRecord 类的属性。 有关详细信息,请参阅 ProgressRecord 类。