在 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>

指定可區別每個進度列的識別碼。當您以單一命令建立一個以上的進度列時,請使用此參數。如果進度列之間沒有不同的識別碼,它們會相互覆蓋,而不是以序列顯示。

必要?

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 所傳回的物件型別。

輸入

您無法經由管道將輸入輸出至這個 Cmdlet。

輸出

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。針對該迴圈的每一個增量,第二個迴圈會計數到 10,000。
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 會搜尋每個傳入的物件的 message 屬性以找出 "bios"。如果找到該字串,就會在 $out 中加入訊息。

第四行,計數器變數 $i 會增加 1 以記錄「又檢查了一個事件」。

第五行,使用 Write-Progress Cmdlet 搭配 Activity 和 Status 文字欄位的值,這兩個欄位會分別建立進度列標題的第一行和第二行。PercentComplete 參數值的計算方式是將已處理的事件數 ($i) 除以擷取的事件總數 ($events.count),再將該結果乘以 100。

最後一行,ForEach-Object Cmdlet 的 End 參數是用來顯示 $out 變數中儲存的訊息。






請參閱




目錄