在 Windows PowerShell 命令窗口内显示进度栏。
语法
Write-Progress [-Activity] <string> [-Status] <string> [[-Id] <int>] [-Completed] [-CurrentOperation <string>] [-ParentId <int>] [-PercentComplete <int>] [-SecondsRemaining <int>] [-SourceId <int>] [<CommonParameters>]
说明
Write-Progress cmdlet 会在 Windows PowerShell 命令窗口中显示一个进度栏,描绘正在运行的命令或脚本的状态。您可以选择进度栏所反映的指示器,以及进度栏的上方和下方显示的文本。
参数
-Activity <string>
指定状态栏上方标题中的第一行文本。此文本描述正在报告其进度的活动。
是否为必需? |
true |
位置? |
1 |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-Completed
指示进度栏是否可见。如果省略此参数,则 Write-Progress 会显示进度信息。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-CurrentOperation <string>
指定进度栏下方的文本行。此文本描述当前正在进行的操作。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-Id <int>
指定区分各个进度栏的 ID。当您在一条命令中创建多个进度栏时,请使用此参数。如果不为进度栏指定不同的 ID,它们会重叠起来,而不会连续地显示。
是否为必需? |
false |
位置? |
3 |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-ParentId <int>
标识当前活动的父活动。如果当前活动没有父活动,请使用值 -1。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-PercentComplete <int>
指定已完成的活动的百分比。如果完成百分比未知或不适用,请使用值 -1。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-SecondsRemaining <int>
指定预计的在完成活动之前剩余的秒数。如果剩余秒数未知或不适用,请使用值 -1。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-SourceId <int>
标识记录源。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-Status <string>
指定状态栏上方标题中的第二行文本。此文本描述活动的当前状态。
是否为必需? |
true |
位置? |
2 |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
<CommonParameters>
此 cmdlet 支持通用参数:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息,请参阅 about_Commonparameters.
输入和输出
输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。
输入 |
None 不能通过管道将输入传递给此 cmdlet。 |
输出 |
None Write-Progress 不生成任何输出。 |
说明
如果进度栏未显示,请检查 $ProgressPreference 变量的值。如果将值设置为 SilentlyContinue,则不会显示进度栏。有关 Windows PowerShell 首选项的详细信息,请参阅 about_Preference_Variables。
该 cmdlet 的参数对应于 ProgressRecord 类 (System.Management.Automation.ProgressRecord) 的属性。有关详细信息,请参阅 Windows PowerShell 软件开发工具包 (SDK) 中的 ProgressRecord 主题。
示例 1
C:\PS>for ($i = 1; $i -lt 101; $i++ ) {for ($j=0;$j -lt 10000;$j++) {} write-progress -activity "Search in Progress" -status "% Complete:" -percentcomplete $i;} 说明 ----------- 此命令显示两个嵌套 For 循环的进度。第一个循环数到 100,对于该循环的每次递增,第二个循环都会数到 10000。 Write-Progress 命令包括一个状态栏标题(“activity”)、一个状态行和变量 $i(For 循环中的计数器),该变量用来指明任务的相对完成程度。
示例 2
C:\PS>for($i = 1; $i -lt 101; $i++ ) {write-progress -activity Updating -status progress-> -percentcomplete $i -currentOperation OuterLoop} for($i = 1; $i -lt 101; $i++ ) {write-progress -activity Updating -status progress -percentcomplete $i -id 1 -currentOperation InnerLoop} Updating progress -> [oooooooooooooooooo ] OutsideLoop Updating progress [oooooooooooooooooo ] InnerLoop 说明 ----------- 此示例显示两个嵌套 For 循环的进度,每个 For 循环都由一个进度栏表示。 第二个进度栏的 Write-Progress 命令包含用来与第一个进度栏进行区分的 Id 参数。若不使用 Id 参数,进度栏会彼此重叠,而不会按顺序上下显示。
示例 3
C:\PS>$events = get-eventlog -logname system C:\PS> $events | foreach-object -begin {clear-host;$i=0;$out=""} ` -process {if($_.message -like "*bios*") {$out=$out + $_.Message}; $i = $i+1;` write-progress -activity "Searching Events" ` -status "Progress:" -percentcomplete ($i/$events.count*100)} ` -end {$out} 说明 ----------- 此命令显示在系统事件日志消息中查找字符串“bios”的命令的进度。 在命令的第一行中,Get-EventLog cmdlet 会获取系统日志中的事件,并将它们存储在 $events 变量中。 在第二行中,通过管道将这些事件传递给 ForEach-Object cmdlet。在开始处理前,使用 Clear-Host cmdlet 来清除屏幕、将计数器变量 $i 设置为零,并将输出变量 $out 设置为空字符串。 第三行是 ForEach-Object cmdlet 的 Process 脚本块,该 cmdlet 在每个传入对象的消息属性中搜索“bios”。如果找到该字符串,则会将消息添加到 $out。 在第四行中,计数器变量 $i 将递增以记录又检查了一个事件。 第五行将 Write-Progress cmdlet 与 Activity 和 Status 文本字段的值结合使用,分别创建进度栏标题的第一行和第二行。通过将已处理的事件数 ($i) 除以检索到的事件总数 ($events.count),然后再乘以 100 计算得出 PercentComplete 参数值。 在最后一行中,ForEach-Object cmdlet 的 End 参数用于显示 $out 变量中存储的消息。
另请参阅