在 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 变量中存储的消息。






另请参阅




目录